QObject
|
QAbstractItemModel — — — — — — — — — — — — — —
| | |
QAbstractListModel QAbstractProxyModel QAbstractTableModel
| |
QStringListModel QIdentityProxyModel
QSortFilterProxyModel
QAbstractItemModel
为ITEM-MODEL提供抽象接口,需要继承实现,不能直接实例化
-
每一项都可以通过index访问到 index()
-
每一项都捆绑了很多数据元素,可是使用data(),并指定一个角色来提取出该项对应角色的数据元素。或者使用itemData()来一次获取所有所有角色的数据
每个role的数据使用一个特定的Qt::ItemDataRole来设置
-
对于某一个单独的role的数据设置使用 setData(), setItemData()
-
项可以通过flags()查询,查看他们是否能被选择、拖拽或以其他方式操作
如果一个项含有子项,hasChildren()返回true
model中的每一个层级都有 rowCount() 和 a columnCount() ,行列的插入删除使用: insertRows(), insertColumns(), removeRows(), and removeColumns()
子类化: QT中讨论子类化model的一篇文章《Model Subclassing Reference》
QAbstractListModel
- 提供一维列表抽象模型(non-hierarchical)
- 这个类提供了比 QAbstractItemModel更多针对于list的接口,因此不再适用于treeviews
- 和QAbstractItemModel不同的是,ListModel为columnCount()提供了默认实现用来告知views列数为1
QAbstractProxyModel
构造一个抽象的代理model,可以实现数据排序、筛选或其他数据处理的任务。
QAbstractTableModel
- 提供一个二维数据的抽象模型
- 因为他有了more specialized interface,所以不再适用于tree结构,但可以用于list中,不过更好的方法是使用QAbstractListModel
(结)