157 - 模型/视图编程(Model/View) - 【扫盲】
本帖最后由 不二如是 于 2016-11-25 10:47 编辑应用程序中往往要存储大量的数据,并对他们进行处理,然后通过各种形式先是给用户。
用户需要时还可以对数据进行编辑。
Qt中的模型/视图架构就是用来实现:
大量数据的存储、处理、显示
Qt 4 中就引入了一个新的项视图类!
使用模型/视图架构(就是上面那张图)来管理数据和展示给用户的方式之间的关系。
引入:
'功能分离思想为开发者定制项目提供高度的灵活性'
帮助文档:Model/View Programming
[*]架构介绍
MVC(Model View Controller)是一种起源于Smalltalk的设计模式!
用于创建用户界面!
MVC包含三个组件:
Model -> 模型是应用对象,表示数据
View -> 视图是用户界面,显示数据
Controller -> 控制定义了界面与用户的交互方式。
上面那个稍微翻一下:
模型与数据进行通信,为架构中的其他组件提供了接口。
视图从模型中获得模型索引(Model Index)。
模型索引用来显示数据。
当编辑项目时,代理使用模型索引直接与模型进行通信!
将视图和控制组件结合起来就形成了模型/视图架构。
同样将数据和存储向用户的展示进行了分离,提供了更为简单的框架。
数据和界面进行了分离,这样做使得:
相同的数据在多个不同的视图中显示成为可能
并且这样只需要改变顶层的视图,并不需要改变最底层的数据框架。
为了用户输入能进行灵活处理,还引入了委托(Delegate,代理)。
Delegate的引入后,就可以定制数据的渲染和编辑方式!
[*]组成部分
大体上,MVC可以分为3组:
模型、 视图、 代理
其中每一个组件都使用了抽象基类来定义,三者之间通过信号和槽来实现通信
-> 当数据源数据发生改变时,模型发出信号告知视图。
-> 当用户与显示的项目交互时,视图发出信号提供交互信息。
-> 当编辑时,代理发出信号,告知模型、视图编辑器的状态。
[*]模型
所有的模型都基于QAbstractItemModel类,这个牛x类定义了一个接口,可以提供视图、委托来访问数据。
数据本身并不是一定要存储在模型中,也可以存储在一个数据结构、一个独立的类、文件、数据库、应用程序中的其他组件中。
这个类提供的接口让数据可以灵活的处理各种视图,这些视图可以将数据变现为:
表格(table)、列表(list)、树(tree)等形式。
Qt还提供了一些现成的模型来处理数据项:
-> QStringListModel 用来存储一个简单的QString项目列表
-> QStandardItemModel 管理复杂的树形结构数据项,每一个数据项可以包含任意的数据
-> QFileSystemModel 提供了本地文件系统中文件、目录的信息
-> QSqlQueryModel、QSqlTableModel、QSqlRealtionalTableModel 用来访问数据库
[*]视图
Qt提供了几种不同的类型的视图,他们都完全实现了各自的功能。
-> QListView 将数据项显示为一个列表。
-> QTableView 将模型中数据项先是在一个表格中。
-> QTreeView 将模型的数据项显示在具有层次的列表中。
[*]代理
QAbstractItemDelegate是代理的抽象基类。
从Qt 4.4版本开始,默认的委托实现由QStyledItemDelegate类提供,这也被用作Qt标准视图的默认委托。
QStyledItemDelegate 和 QItemDelegate 是相互独立的哈~
只能选择其一来为视图中的项目绘制和提供编辑器。
他们的主要不同就是:
QStyleItemDelegate使用当前的样式来绘制他的项目。
就是说你要使用样式表(QSS),就用这个作为基类
哎呦,更新了。 wei_Y 发表于 2016-11-25 11:12
哎呦,更新了。
{:10_278:}怨我,太爱小天才养殖场了 大爱技术贴
页:
[1]