QModelIndex QAbstractItemModel::index(int row, int column, QModelIndex &parent = QModelIndex() ) const [ pure virtual]
QModelIndex indexA = model->index(0, 0, QModelIndex() );
QModelIndex indexB = model->index(1, 1, QModelIndex() );
QModelIndex indexC = model->index(2, 1, QModelIndex() );
为什么总把QModelIndex()作为父类的引用,将在下一节讨论。
Parent of Items
在Table或者List Model中数据和数据将在View中显示的位置完全一致,这是一种理想状态。但是在Tree Model中,需要更灵活的接口。因此顶级的Model Index能作为下面的Model Index 父类。如下图所示:
QModelIndex indexA = modex->index(0, 0, QModexIndex() );
QModelIndex indexC = modex->index(2, 1, QModexIndex() );
查看Qt文档。QModexIndex::QModexIndex() 构造函数创建一个空的ModelIndex,因为A和C都是Top-level,所以可以认为父类的QModexIndex为空
而对于B来说 QModelIndex indexB = modex->index(1, 0, indexA ); 父类的ModelIndex就是indexA
Item Roles
在Model中的数据以不同的角色划分,例如Qt::DisplayRole就是获得字符串,然后在View中显示出来。其他的角色详见Qt::ItemDataRole。
我们能够根据Model Index和Role获得我们想要的类型的数据。
QVariant value = model->data(index, role);
总结:
1.ModelIndex提供给View和Delegata 数据信息。Model是List、Table、Tree形式,和底层的数据存储在哪里,如何存储无关。
2.获得ModelIndex 需要3个参数,Row,Column,Parent Modex Index of Item。
3.Model根据其他组件(例如:View Delegate)的需求,创建ModelIndex。
4.Top-level ModelIndex : model->index(row, column, QModelIndex() )
5.子ModelIndex : model->index(row, column, indexParent )
6.Qt::ItemDataRole 区分数据