1

我正在寻找一种从模型中的特定数据创建 QModelIndex 的方法。我可以通过以下方式从 QModelIndex 转到数据项:

CustomData *data = static_cast<CustomData *>(modelIndex.internalPointer());

但我正在寻找一个反函数:

QModelIndex *index = createIndex(data); // ??

我已经实现了与简单树模型示例( http://doc.qt.io/qt-5/qtwidgets-itemviews-simpletreemodel-example.html)非常相似的数据之间的链接。我的视图正确显示数据,但有相当大的滞后。我想发出 dataChanged(QModelIndex, QModelIndex) 以立即查看视图的更新,因为我认为滞后是由于等待视图更新。

在链接的示例中,我试图从 TreeItem 获取其在 QTreeModel 中的相应索引。

4

2 回答 2

1

视图不会定期更新。它会根据需要进行更新,从您的模型的角度来看,这意味着任何事情。如果您的模型在项目更改其一个或多个数据角色值时没有发出dataChanged,那么您的模型就是损坏了。

要修复它,您有两种方法:

  1. 将行和列添加到CustomData. 在添加/删除行/列时,您必须保持这些更新。

  2. 需要时,迭代项目的父项中的项目以查找子项 - 当您这样做时,您会从迭代项目的循环中获取行/列。

我认为你太努力了,通过。您很可能根本不需要实现CustomData- 只需在变体中使用QStandardItem和存储数据。然后,QStandardItemModel为您处理迭代器和信号的所有细节。要将自定义数据类型存储在QVariant用于QStandardItem存储的 中,只需QVariant通过 将其暴露给机器Q_DECLARE_METATYPE(YourType)

您需要提供一个令人信服的论点,以某种方式 aQStandardItem不足以满足您的需求。

于 2015-08-16T09:26:24.013 回答
-1

您不能使用传统的指标,因为在模型/视图编程中它们不会一直存在,除非您使用:

QPersistentModelIndex

http://doc.qt.io/qt-5/qpersistentmodelindex.html#details

模型/视图编程还引入了许多新范例。它和使用它的文档有一个学习曲线......通读它几次并尝试使用与使用它们的 Qt Creator 捆绑在一起的示例。

更多关于使用QPersistentModelIndex

http://doc.qt.io/qt-5/model-view-programming.html#using-model-indexes

模型索引提供对信息片段的临时引用,并可用于通过模型检索或修改数据。由于模型可能会不时重组其内部结构,因此模型索引可能会变得无效,并且不应存储。如果需要对一条信息进行长期引用,则必须创建持久模型索引。这提供了对模型保持最新信息的参考。临时模型索引由QModelIndex类提供,持久模型索引由QPersistentModelIndex类提供。

要获得与某项数据对应的模型索引,必须为模型指定三个属性:行号、列号和父项的模型索引...

于 2015-08-16T05:47:31.857 回答