QT Model 继承关系

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


QAbstractItemModel


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

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


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

    1.jpg

    QT Model 继承关系_第1张图片
    2.jpg

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

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


    QT Model 继承关系_第2张图片
    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

(结)

你可能感兴趣的:(QT Model 继承关系)