QAbstractItemModel实现index函数,给tableview使用
时间: 2023-11-22 09:56:12 浏览: 170
QAbstractItemModel 的 index 函数是用来创建一个 QModelIndex 对象,用于定位模型中的一个 item。在 Table View 中,每个 item 都有一个对应的 QModelIndex,这个对象包含了 item 在模型中的行、列信息,以及指向父节点的指针。
下面是一个示例实现:
```cpp
QModelIndex MyModel::index(int row, int column, const QModelIndex &parent) const
{
if (!hasIndex(row, column, parent))
return QModelIndex();
// 获取父节点
MyItem *parentItem;
if (!parent.isValid())
parentItem = rootItem;
else
parentItem = static_cast<MyItem*>(parent.internalPointer());
// 获取子节点
MyItem *childItem = parentItem->child(row);
if (childItem)
return createIndex(row, column, childItem);
else
return QModelIndex();
}
```
在这个示例中,我们首先判断输入的行、列和父节点是否有效,如果无效则返回一个无效的 QModelIndex。接着,我们获取父节点对应的 MyItem 对象,然后根据行数获取该节点下的子节点。如果子节点存在,则使用 createIndex 函数创建一个新的 QModelIndex 对象,并将其返回;否则返回一个无效的 QModelIndex。
需要注意的是,createIndex 函数的第三个参数应该是一个指向 MyItem 对象的指针,而不是该对象本身。这是因为 QModelIndex 对象需要存储一个 void* 类型的指针,并且该指针只能在 QAbstractItemModel 中使用。因此,我们需要将 MyItem 对象转换为指针类型,然后将其传递给 createIndex 函数。
有了 index 函数,我们就可以在 Table View 中使用我们的自定义模型了。如果需要在 Table View 中显示数据,还需要实现 data 函数。
阅读全文