QTreeView上的setModel invalids以前的模型索引?

时间:2016-03-18 14:52:12

标签: qt qtreeview qmodelindex

我有一个QTreeView,我附加了一个自定义模型。

在我的代码中,我这样做:

p

我可以在第二次treeView->setModel(modelPtr) ... ... ... treeView->setModel(modelPtr) 调用后依赖它,模型索引将与第一次调用setModel()后保持一致吗?

我在某处读到他们不能依赖并且可以改变。

a)请确认这种理解是否正确。

请求此论坛的专家确认并添加与模型索引何时无效相关的任何其他重要信息。

b)中 假设,我已将树视图附加到模型中。

setModel()

然后,我将它附加到代理模型:

_dtreeView->setModel(modelPtr)

即使将视图设置为代理模型,模型中由_dtreeView->setModel(_proxyModelPtr) 表示的项目的模型索引是否仍然相同?

我认为它会保持相同,因为视图已更改为代理模型,但实际模型未更改。

请专家们确认。

1 个答案:

答案 0 :(得分:1)

保存QModelIndex并不安全。文档说:

  

注意:应立即使用模型索引然后丢弃。您   调用模型后,不应依赖索引保持有效   更改模型结构或删除项目的函数。如果   你需要随着时间的推移保持模型索引使用QPersistentModelIndex。

请参阅QModelIndexQPersistentModelIndex

您可以存储QPersistentModelIndex。如果模型保持有效(未删除),即使您更改了视图的模型,也可以依赖QPersistentModelIndex。索引与模型相关,它不依赖于视图(您可以在更多视图上显示相同的模型)。