2016-03-18 82 views
0

我有一個QTreeView附加了一個自定義模型。QTreeView中的setModel是否違反了以前的模型索引?

在我的代碼,我做的:

treeView->setModel(modelPtr) 

... 

... 

... 

treeView->setModel(modelPtr) 

我可以依靠的第二setModel()電話後,該模型指標將保持相同,第一個呼叫到setModel()後?

我在某處讀到他們不能被依賴並且可以改變的地方。 a)請確認這種理解是否正確。

請求此論壇的專家確認並添加與模型索引何時失效相關的任何其他重要信息。

b) 假設我已將樹視圖附加到模型中。

_dtreeView->setModel(modelPtr) 

然後,我把它連接到代理模式:

_dtreeView->setModel(_proxyModelPtr) 

將通過modelPtr代表的模型項目的模型索引,甚至設置以代理模式後仍保持一樣的嗎?

我認爲它會保持不變,因爲視圖已更改爲代理模型,但實際模型未更改。

請求專家確認。

回答

1

保存QModelIndex並不安全。該文檔說:

注意:模型索引應立即使用,然後丟棄。在調用模型 函數(更改模型結構或刪除項目)後,您不應依賴索引保持有效。如果 您需要保持模型索引隨着時間的推移使用QPersistentModelIndex。

請參閱QModelIndexQPersistentModelIndex。您可以存儲QPersistentModelIndex。如果模型仍然有效(未刪除),即使您更改視圖的模型,也可以依賴QPersistentModelIndex。索引與模型相關,並且不依賴於視圖(您可以在更多視圖上顯示相同的模型)。

相關問題