天天看点

Qt5中model/view模型视图结构模型(Model)视图(View)代理(Delegate)

        MVC设计模式是起源于Smalltalk的一种与用户界面相关的设计模式。通过此模式,可以有效地分离数据和用户界面。MVC设计模式包括三个元素,表示数据的模型(Model),表示用户界面的视图(View)和定义用户在界面上操作的控制器(Controller)。

        与MVC设计模式类似,Qt引入了模型/视图结构完成了数据与界面的分离,即InterView框架。Qt的模型/视图结构分为三部分:模型(Model),视图(View)和代理(Delegate)。其中,模型与数据源通信,并为其他部件提供接口,而视图从模型中获得用来引用数据条目的模型索引(ModelIndex)。在视图中,代理负责绘制数据条目,当编辑条目时,代理和模型直接通信。模型视图代理之间通过信号槽传递信息。之间关系如下:

  • 数据发生改变时,模型发出信号通知视图;
  • 用户对界面进行操作,视图发出信号;
  • 代理发出信号告知模式和视图编辑器目前的状态。
Qt5中model/view模型视图结构模型(Model)视图(View)代理(Delegate)

        简而言之,就是模型负责存储数据,视图负责将数据显示在用户界面,当用户修改某一个视图上的数据,代理就创建一个类似类型输入对话框的控件,输入修改数据,然后修改之后,这个代理将数据传给模型,然后视图根据模型变更数据显示。

模型(Model)

        InterView框架中所有模型都基于抽象基类QAbstractItemModel。然后被QProxyModel,QAbstractListModel,QAbstractTableModel,QAbstractProxyModel,QDirModel,QFileSydtemModel,QHelpContentModel和QStandardItemModel类所继承。其中,QAbstractListModel类和QAbstractTableModel类是列表和表格模型的抽象基类,如果需要列表或表格模型,则应从这两个类继承。完成QStringList存储的QStringListModel类继承自QAbstractListModel类;而与数据库有关的QSqlQueryModel类继承自QAbstractTableModel类;QAbstractProxyModel类是代理模型的抽象类;QDirModel类是文件和目录的存储模型。

视图(View)

        InterView框架中所有视图都基于抽象基类QAbstractItemView,然后被QColumnView,QHeaderView,QListView,QTableView和QTreeView类继承。其中,QListView被QUndoView类和QListWidget类继承;QTableView类被QTableWidget类继承;QTreeView类被QTreeWidget类继承。而QListWidget类,QTableWidget类和QTreeWidget类实际上已经包含了数据,是模型/视图集成在一起的类。

代理(Delegate)

        InterView框架中的所有代理都基于抽象基类QAbstractItemDelegate,此类被QItemDelegate和QStyleItemDelegate类继承。其中,QItemDelegate类还被表示数据库中关系代理的QSqlRelationalDelegate类继承。

关于模型视图介绍就这么多,大部分是书上的,也有一点自己的理解 ,后期有时间会写一点案例。