数据项的索引QModellndex
数据模型中存放着数据,要获取或写入数据,需要知道数据所在的行和列。行和列单独构成一个类称为数据项索引QModelIndex,通过数据项索引可以定位到对应的数据。
由于数据模型可能是一个列表、表格、树或更复杂的结构,所以数据模型的数据索引也会比较复杂。通常用QModelIndex()表示指向数据模型根部的索引这个索引不指向任何数据表示最高层索引。
用数据模型的 index(row,column,parent)表示索引parent(类型是QModelIndex)下的第 row 行第 column 列的数据项索引
- 例如index_l=index(2,1,QModelIndex())表示根目录下的第 row=2行第 column=1列数据的索引
- 如果在该数据项下还有子数据项,则index_2=index(1,3,index_1)表示在 index_1下的第row=1行第column=3列数据项的索引,其他情况类推
数据项索引的常用方法如表所示。
- 用parent()方法可以获得父数据项的索引;
- 用sibling(row,column)方法,siblingAtColumn(column)方法和 siblingAtRow(row)方法可以获取同级别的 row行 column 列的数据项的索引,
- 用isValid()方法可以判断索引是否有效;
- 用row()方法和 column)方法可以获取数据索引所指向的行值和列值;
- 用flags()方法获取数据项的状态,返回值是 Qt.ItemFlag 的枚举值可能是:
- Qt.NoltemFlags(没有任何属性)
- Qt.ItemIsSelectable(可选择)
- Qt.ItemIsEditable(可编辑)
- Qt.ItemIsDragEnabled(可拖拽)
- Qt.ItemIsDropEnabled(可拖放)
- Qt.ItemIsUserCheckable(可选)
- Qt.ItemIsEnabled(可激活)
- Qt.ItemIsAutotristate(由子项的状态决定)
- Qt.ItemNeverHasChildren禁止有子项)
- Qt.ItemIsUserTristate(用户可以在3种状态间切换)
QModellndex的方法及参数类型 | 返回值的类型 | 说明 |
---|---|---|
model() | QAhstractItemModel | 获取数据模型 |
parent() | QModelIndex | 获取父索引 |
sibling(row:int,column:int) | QModelIndex | 获取同级别的索引 |
siblingAtColumn(column:int) | QModelIndex | 按列获取同级别的索引 |
siblingAtRow(row;int) | QModelIndex | 按行获取同级别的索引 |
row() | int | 获取索引所指向的行值 |
column() | int | 获取索引所指向的列值 |
data(role: int=Qt.ItemDataRole) | Any | 获取数据项指定角色的数据 |
flags() | Qt.ItemFlag | 获取标识 |
isValid() | bool | 获取索引是否有效 |