-1

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

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

treeView->setModel(modelPtr)

...

...

...

treeView->setModel(modelPtr)

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

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

a) 请确认此理解是否正确。

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

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

_dtreeView->setModel(modelPtr)

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

_dtreeView->setModel(_proxyModelPtr)

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

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

请专家确认。

4

1 回答 1

1

保存QModelIndex. 文档说:

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

请参阅QModelIndexQPersistentModelIndex

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

于 2016-03-18T16:10:38.557 回答