QTreeView 上的 setModel 会使以前的模型索引无效?

setModel on a QTreeView invalids previous model indexes?

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

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

treeView->setModel(modelPtr)

...

...

...

treeView->setModel(modelPtr)

我可以相信在第二次 setModel() 调用之后,模型索引将与第一次调用 setModel() 之后保持相同吗?

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

a) 请确认这个理解是否正确

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

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

_dtreeView->setModel(modelPtr)

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

_dtreeView->setModel(_proxyModelPtr)

即使在将视图设置为代理模型后,由 modelPtr 表示的模型中项目的模型索引是否保持不变?

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

请专家确认。

保存 QModelIndex 不安全。文档说:

Note: Model indexes should be used immediately and then discarded. You should not rely on indexes to remain valid after calling model functions that change the structure of the model or delete items. If you need to keep a model index over time use a QPersistentModelIndex.

QModelIndex and QPersistentModelIndex

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