QAbstractTableModel:index() 与 createIndex()

Posted

技术标签:

【中文标题】QAbstractTableModel:index() 与 createIndex()【英文标题】:QAbstractTableModel: index() vs. createIndex() 【发布时间】:2012-11-17 22:56:32 【问题描述】:

当子类化 QAbstractTableModel 时,获取给定行和列的 QModelIndex 的正确方法是什么(例如,提供方便的方法 data(int row, int column))?

有 index() 和 createIndex() - 他们似乎都这样做?

例子:

TableModel::data(int row, int column, int role) const

    return data(index(row, column), role);

【问题讨论】:

【参考方案1】:

你想要的是index(),createIndex()是子类用来生成索引的。但是,QModelIndex 有一个 data() 成员。所以,model->index(row, column).data(role) 可能是你想要的。不需要辅助函数。

【讨论】:

【参考方案2】:

我想说 index() 是这里的惯用方式,那么你的代码是正确的。

通常,createIndex() 用于 QAbstractItemModel 的子类中,当您需要覆盖 index() 和 parent() 方法时。由于 QModelIndex 构造函数是私有的,因此您必须使用 createIndex() 来创建新索引。

此外,QModelIndex 可以存储一些内部数据 (QModelIndex::internalPointer)。 createIndex() 还用于将内部指针传递给创建的 QModelIndex。

【讨论】:

以上是关于QAbstractTableModel:index() 与 createIndex()的主要内容,如果未能解决你的问题,请参考以下文章

如何过滤 QAbstractTableModel 模型

大型 QAbstractTableModel 的 QTableView 动态行高

QTableView + QAbstractTableModel:通过拖放移动行

调试数据方法 qabstracttablemodel

QTableView::edit( const QModelIndex &index ) 失败

如何在 QTableView/QAbstractTableModel 中使用多行文本/换行符?