QT Model 继承关系

QObject
  |
QAbstractItemModel — — — — — — — — — — — — — —
  |             |           |
QAbstractListModel   QAbstractProxyModel  QAbstractTableModel
  |             |                  
QStringListModel    QIdentityProxyModel        
            QSortFilterProxyModel


QAbstractItemModel


  1. 为ITEM-MODEL提供抽象接口,需要继承实现,不能直接实例化

  2. 每一项都可以通过index访问到 index()


    3.jpg
  3. 每一项都捆绑了很多数据元素,可是使用data(),并指定一个角色来提取出该项对应角色的数据元素。或者使用itemData()来一次获取所有所有角色的数据

    1.jpg

    2.jpg

  4. 每个role的数据使用一个特定的Qt::ItemDataRole来设置

  5. 对于某一个单独的role的数据设置使用 setData(), setItemData()


    1.jpg
  6. 项可以通过flags()查询,查看他们是否能被选择、拖拽或以其他方式操作


    2.jpg
  7. 如果一个项含有子项,hasChildren()返回true

  8. model中的每一个层级都有 rowCount() 和 a columnCount() ,行列的插入删除使用: insertRows(), insertColumns(), removeRows(), and removeColumns()

  9. 子类化: QT中讨论子类化model的一篇文章《Model Subclassing Reference》

QAbstractListModel


  1. 提供一维列表抽象模型(non-hierarchical)
  2. 这个类提供了比 QAbstractItemModel更多针对于list的接口,因此不再适用于treeviews
  3. 和QAbstractItemModel不同的是,ListModel为columnCount()提供了默认实现用来告知views列数为1

QAbstractProxyModel


构造一个抽象的代理model,可以实现数据排序、筛选或其他数据处理的任务。

QAbstractTableModel


  1. 提供一个二维数据的抽象模型
  2. 因为他有了more specialized interface,所以不再适用于tree结构,但可以用于list中,不过更好的方法是使用QAbstractListModel

(结)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容