2012-06-15 41 views
0

當我使用此代碼從我的樹中刪除一個項目,該項目被刪除,但委託保持運行:刪除樹項目仍在運行QStyledItemDelegate

# I do this from inside an item that has a reference to its tree-owner.... 
index = self.tree.indexFromItem(self) 
self.tree.model().removeRow(index.row(), index.parent()) 

有一些參考我惹得到它要妥善放棄物品的顏料?

如果我清除樹並重建它,它工作正常,但我試圖更直接地做到這一點。

一些更多的細節.... 我的GUI是3D應用程序。該樹項目訪問3D應用程序API中的節點。當3D應用程序中的節點被刪除(嘗試將我的樹同步到場景)時,我將刪除該項目。我看到的是該項目已成功從樹中移除,但由於我對3D應用程序節點的引用錯誤而引發錯誤。如果我點擊錯誤一遍又一遍地重複。我不確定它是否每次都失敗,或者如果第一個錯誤是破壞導致重複錯誤的GUI,就好像它中斷了清理。

我試圖將所有我的項目的成員/屬性沒有,但我不知道這實際上殺死的引用,或在垃圾收集器將完成其工作,等

回答

0

我不得不假設這只是一個異步更新,其中刪除行調用正在跳出委託進行更新。我加入了保護來消除錯誤,一切似乎都正常。

0

我想你」重新使用你自己的模型。 removeRow()只是一個便利功能,可以調用removeRows()。告訴我們removeRows()的代碼,這可能是問題所在。

你在調用beginRemoveRows()endRemoveRows()在你的執行removeRows()

+0

這是使用QTreeWidget。我嘗試使用removeRows並沒有工作。我上面的代碼似乎工作,如果我在我的代表中添加保護退出,如果我的項目的引用不再可用。我想這只是運行異步?如果這是正確的,那麼我需要使更新完成而沒有錯誤來完成所有工作似乎是合乎邏輯的。 – Rafe