PyQt(Python+Qt)学习随笔:Model/View架构概述

admin 2022年7月1日00:05:53评论31 views字数 1059阅读3分31秒阅读模式

一、引言

模型-视图-控制器(Model-View-Controller,简称MVC)是一种源于Smalltalk在构建用户界面时 广泛使用的设计模式。在《Design Patterns》一书中,Gamma等人这样描述到:“MVC由三种对象组成。模型Model是应用程序对象,视图View是其屏幕表示,控制器Controller定义用户界面对用户输入的反应方式。在MVC之前,用户界面设计倾向于将这些对象组合在一起。MVC将它们解耦以增加灵活性和重用性。

如果将MVC架构中的视图和控制器对象组合在一起,结果就是Model/View体系结构。这还是将数据的存储方式与展现给用户的方式分开,但是基于相同的原则提供了一个更简单的框架。这种分离使得可以在几个不同的视图中显示相同的数据,并实现新类型的视图,而无需更改底层数据结构。

为了允许灵活地处理用户输入,在PyQt和Qt中引入了代理Delegate的概念,代理允许自定义数据项的呈现和编辑方式。不过老猿不准备就代理的概念展开进行介绍。

二、架构模型

2.1 架构模型图

完整的Model/View架构模型如下:
PyQt(Python+Qt)学习随笔:Model/View架构概述

2.2、架构模型各组件功能

  •  模型Model与数据源通信,为体系结构中的其他组件提供数据接口。与数据源通信的方式取决于数据源的类型(如文件、数据库、消息等)以及模型的实现方式。

  •  视图View从模型Model中根据一定条件(如行号、列号等)获取模型索引,模型索引是一个指向数据项的引用。通过模型Model的模型索引,视图View可以从数据源检索数据项。

  •  在标准视图中,代理Delegate展现数据项,编辑项时,代理Delegate直接使用模型索引与模型Model通信。

一般情况下Model/View可以分为上述三组:模型Models、视图Views和代理delegates。这些组件中的每一个都是由抽象类定义的,这些抽象类提供公共接口,在某些情况下还提供特性的默认实现。抽象类应该子类化,通过子类以便提供其他组件所需要的全部功能,同时特殊情况下这也可以针对特定场景编写专门的组件。

2.3、架构模型各组件通信机制

模型、视图和代理使用信号和插槽相互通信:

  •  来自模型Model的信号通知视图View有关数据源所保存数据的更改

  •  来自视图View的信号提供了有关用户与所显示项目的交互的信息

  •  来自代理delegate的信号在数据项编辑期间用于告诉模型Model和视图View编辑器的状态


原文始发于微信公众号(汇编语言):PyQt(Python+Qt)学习随笔:Model/View架构概述

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年7月1日00:05:53
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   PyQt(Python+Qt)学习随笔:Model/View架构概述http://cn-sec.com/archives/1135282.html

发表评论

匿名网友 填写信息