Qt的MV模型,源于但又不同于MVC,其使用的MVD。Model和View的含义未发生变化,通过Delegate(委托或称为代理)来自定义每个条目的显示和编辑方式。
下面是我总结的Qt的MV结构的类间关系图。Qt的MV结构就是这样实现的,我们通过继承重写这些接口类,就可以很方便地将项目中的数据和视图分离。

MODEL/VIEW
- QAbstractItemView
视图从模型中获取模型索引,用其来表示数据项。用户与显示的项目交互时,视图发出信号来提供交互信息。含有槽dataChanged()。
1.1 QColumnView
1.2 QHeaderView
1.3 QListView
1.3.1 QListWidget
1.4 QTableView
1.4.1 QTableWidget
1.5 QTreeView
1.5.1 QTreeWidget - QAbstractItemModel
提供标准接口供视图和委托访问其内部数据源。其子类会以层次化结构来表示数据,这个结构中包含了数据项表。模型中数据改变会通过信号槽机制通知视图。 注意,这是个接口类,其纯虚函数有:index(), parent(), rowCount(), columnCount(), data()。数据改变将发送dataChanged()信号
2.1 QStandardItemModel
2.1.1 QStandardItem
2.2 QAbstractListModel
如需定制,所需的数据结构可以表示为项目列表时,可以子类化该类。注意,这是个接口类,其剩下的纯虚函数还有:rowCount(), data(),需要重写。
1> 重写rowCount(), data()可以实现只读模型
2&

本文详细介绍了Qt的Model/View体系,包括QAbstractItemView、QAbstractItemModel、QAbstractItemDelegate等核心类的作用和关系。QAbstractItemView作为视图,从模型中获取数据;QAbstractItemModel提供数据接口,通知视图数据变化;QAbstractItemDelegate则负责数据的呈现和编辑。通过重写相关接口,可以实现数据和视图的定制化。
最低0.47元/天 解锁文章
6975

被折叠的 条评论
为什么被折叠?



