首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从数据项创建QModelIndex

从数据项创建QModelIndex
EN

Stack Overflow用户
提问于 2015-08-15 00:33:55
回答 2查看 2.2K关注 0票数 1

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

代码语言:javascript
复制
CustomData *data = static_cast<CustomData *>(modelIndex.internalPointer());

但是我在寻找一个反函数,从:

代码语言:javascript
复制
QModelIndex *index = createIndex(data); // ??

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

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

EN

回答 2

Stack Overflow用户

发布于 2015-08-16 09:26:24

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

要解决这个问题,您有两种方法:

  1. 将行和列添加到CustomData。在添加/删除行/列时,必须保持这些更新。
  2. 在需要时,迭代项目父项中的项以找到子项--当您这样做时,可以从迭代项的循环中获得行/列。

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

您需要提供一个令人信服的论点,说明QStandardItem在某种程度上不足以满足您的需要。

票数 2
EN

Stack Overflow用户

发布于 2015-08-16 05:47:31

您不能使用传统的指示符,因为在模型/视图编程中,它们不会停留在一起,除非您使用:

QPersistentModelIndex

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

此外,在Model/View编程中引入了许多新的范例。关于它的文档和使用它有一个学习曲线..。读几遍,然后尝试使用与Qt捆绑的使用它们的示例。

关于使用QPersistentModelIndex的更多信息

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

模型索引提供对部分信息的临时引用,并可用于通过模型检索或修改数据。由于模型可以不时地重新组织它们的内部结构,所以模型索引可能变得无效,不应该存储。如果需要对一段信息进行长期引用,则必须创建持久的模型索引。这提供了对模型保持最新信息的引用。临时模型索引由QModelIndex类提供,持久模型索引由QPersistentModelIndex类提供。 若要获得与数据项相对应的模型索引,必须向模型指定三个属性:行号、列号和父项的模型索引。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32020357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档