【问题标题】:Removed Tree Item Still Running QStyledItemDelegate删除的树项目仍在运行 QStyledItemDelegate
【发布时间】:2012-06-15 23:03:56
【问题描述】:

当我使用此代码从我的树中删除一个项目时,该项目被删除但委托继续运行:

# 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,就好像它中断了清理一样。

我尝试将我的所有项目的成员/属性设置为无,但我不确定这是否真的会杀死一个引用,或者垃圾收集器何时会完成它的工作等。

【问题讨论】:

    标签: python qt delegates pyqt


    【解决方案1】:

    我认为您使用的是自己的模型。 removeRow() 只是一个调用removeRows() 的便捷函数。给我们看看removeRows()的代码,这很可能是问题所在。

    您是否在 removeRows() 的实现中调用 beginRemoveRows()endRemoveRows()

    【讨论】:

    • 这是使用 QTreeWidget。我尝试使用 removeRows 并没有用。如果我的项目参考不再可用,如果我在我的代表中添加保护以退出,我上面的代码似乎可以工作。我猜它只是在运行异步?如果这是正确的,我需要让更新完成而没有错误以使其全部正常工作似乎是合乎逻辑的。
    【解决方案2】:

    我不得不假设这只是一个异步更新,其中删除行调用击败了更新委托。我添加了保护以消除错误,一切似乎都正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      • 2018-11-12
      • 1970-01-01
      • 1970-01-01
      • 2020-09-06
      相关资源
      最近更新 更多