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

一、引言

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

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

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

二、架构模型

2.1 架构模型图

完整的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编辑器的状态

老猿Python,跟老猿学Python!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值