(一)Model/View 结构
Model-View-Controller(MVC), 是从Smalltalk发展而来的一种设计模式,常用于创建用户界面。
MVC包含3个组件:
- Model: 应用对象,用来表示数据
- View: 模型的用户界面,用来显示数据
- Controller: 定义了用户界面对用户输入的反应方式
Delegate(委托):为了对用户输入进行灵活处理被引入,用于定制数据的渲染和编辑方式
其中,模型与数据源进行通信,为架构中的其他组件提供了接口。视图从模型中获得模型索引(Model Index),模型索引用来表示数据项。在标准的视图中,委托渲染数据项,当编辑项目时,委托使用模型索引直接与模型进行通信。
(二)Models
1.所有模型的基类:
QAbstractItemModel
2.可子类化以下模型创建自定义模型:
QAbstractItemModel
QAbstractListModel
QAbstractTableModel
3.其他现成的模型:
QStringListModel: 用来存储一个简单的QString项目列表
QStandardItemModel: 管理复杂的树形结构数据项,每一个数据项可以包含任意的数据
QFileSystemModel: 提供了本地文件系统中文件和目录信息
QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel: 用来访问数据库
4.基本概念
①常见的模型:列表模型、表格模型、树模型
②模型索引:每一块可以通过模型获取的数据都使用一个模型索引来表示,视图和委托都使用这些索引来请求数据项并显示。模型索引包含一个指针,指向创建它们的模型。由QModelIndex类提供,它是对一块数据的临时引用,可以用来检索或修改模型中的数据。
③行和列:要获得一个数据项的模型索引,必须指定模型的3个属性:行号、列号、父项的模型索引
QModelIndex index = model->index(row, column, parent);
④父项:当数据项是以根项为父项时,父项的模型索引可以用QModelIndex()表示
⑤项角色:模型中的数据项可以作为各种角色在其他组件中会用,允许为不同的情况提供不同类型的数据
常用角色类型:
常量 |
描述 |
Qt::DisplayRole |
数据被渲染为文本(数据为QString类型) |
Qt::DecorationRole |
数据被渲染为图标等装饰(数据为QColor/ QIcon/ QPixmap类型) |
Qt::EditRole |
数据可以在编辑器中进行编辑(数据为QString类型) |
Qt::ToolTipRole |
数据显示在数据项的工具提示中(数据为QString类型) |