QT学习笔记-模型,视图结构
模型/视图结构概述
- 数据(data):如数据库的一个数据表或 SQL 查询结果,内存中的一个字符串,或磁盘文件结构等。
- 模型(model):与数据通信,并为视图组件提供数据接口。
- 视图(view): 是屏幕上的界面组件,视图从数据模型获得每个数据项的模型索引,通过模型索引获取数据
- 代理(delegate):在视图与模型之间交互操作时提供的临时编辑器。模型项视图提供数据是单身的,一般仅用于显示。当需要在视图上编辑数据时,代理会为需要编辑的数据提供一个编辑器。
模型,视图和代理之间使用信号与槽通信。
- 所有基于项(item)的模型类都基于
QAbstractItemModel
(其父类是 QObject) - 模型只是在内存中临时存储数据,模型的数据来源可以是其他类,数据库等
视图组件:显示数据时,只需要调用视图类的 setModel()
函数
便利类:QListWidget
,QTableWidget
,QTreeWidget
- 视图组件不存储数据
- 便利类则为组件的每个节点或单元格创建一个项用项存储数据,格式设置等。
- 便利类没有数据模型,将界面与数据绑定了。
- 便利类缺乏对大型数据源进行灵活处理的能力,适用于小型数据的和显示和编辑。
代理
- 代理就是在视图组件上为编辑数据提供编辑器
- 如在表格组件中编辑一个单元格的数据同时,缺省是使用一个
QLineEdit
编辑框。代理负责从数据模型获取相应的数据,然后显示在编辑器里,修改数据后,又将其保存到数据模型中。
- 如在表格组件中编辑一个单元格的数据同时,缺省是使用一个
QAbstractItemDelegate
是所有代理类的基类。
索引
数据模型中存储数据的基本单元都是项(item),每个项有一个年号,一个万列号,还有一个父项
项的角色:在为数据模型的一个项设置数据时,可以赋予其不同项的角色的数据。
QStringListModel
与 QListView
QStringListModel
是处理字符串列表的模型类,其实例可以作为 QListView
组件的数据模型。这两个类结合构成模型/视图结构,可以在界面上显示和编辑字符串列表。
setStringList()
将模型的内部字符串列表设置为一组字符串。模型将通知任何附着的视图其基础数据已更改。- 提供编辑和修改字符串列表数据的函数,如
insertRows()
,removeRows()
,setData()
;
自定义代理
- 在模型/视图结构中,代理的作用就是在视图组件进入编辑状态编辑某个项时,提供一个临时的编辑器用于数据编辑,默认的代理编辑器是
QLIneEdit
编辑框