PyQT Model/View

121 阅读2分钟

Qt包含一系列的数据项目展现类,它们使用model/view的架构来控制数据和向用户展现数据形式的关系。这种架构给了开发者更好的、灵活性更高的自定义数据项的方式,也为展示更大范围的数据源提供了标准的模型接口。

model/view 架构

Model-View-Controller(MVC)是一种设计模式,它来源于smalltalk,经常被用于构建用户显示界面。

MVC有三种对象构成。model是应用中的对象,view是屏幕展示,controller则定义了如何对用户的输入做出动作。

将view和controller合并在一起,这就是model/view架构。这种分离使得相同的数据可以有不同的展示方式,实现不同的展示也可以对原来的数据不进行修改。

为了更好增加用户操作的灵活性,在模型中增加了delegate,delegate可以允许自定义修改数据的渲染和修改的方式。

image.png

  • model 和数据源进行通信,提供其他组件接口
  • view 获取model indexes(数据的引用),通过提供数据的引用给model,view可以从数据源检索数据。
  • 在标准视图下,delegate渲染了数据项,当一个数据项修改时delegate直接使用data indexes和model进行通信

大体上,model/view可以分为三组:model、views和delegates。每一个组件都被抽象类提供的通用接口和在一些情况下默认实现的特性提供。抽象类提供了其他模块一系列的可以备用的特性。也允许特殊的模块被编写。

models、views和delegates通过signal和slots进行通信:

  • 信号从model向view发送,通知view数据源数据的更改
  • 信号从view发送,通知用户和被展示的数据进行交互
  • 信号从deletgate发送,可以在数据修改的时候通知model和修改editor的状态