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 的 QTableView 动态行高
QTableView + QAbstractTableModel:通过拖放移动行