当我删除基础C / C ++对象时,我试图避免众所周知的PyQt运行时错误:
http://www.riverbankcomputing.com/pipermail/pyqt/2009-April/022809.html
PyQt4 - "RuntimeError: underlying C/C object has been deleted"
PyQt4 nested classes - "RuntimeError: underlying C/C++ object has been deleted"
PyQt: RuntimeError: wrapped C/C++ object has been deleted
我的每个子类都调用super()
方法,因此正确构造了基类。
仍然,我收到此错误,我想知道是否是因为我正在向QComboBox
添加QTreeWidgetItem
窗口小部件(使用setItemWidget()
方法{ {1}})但我无法将父级设置为包含它的QTreeWidget
。当我尝试时,我收到以下错误:
QTreeWidgetItem
当然,我可以省略构造函数中的父项,也可以将TypeError: QComboBox(QWidget parent=None): argument 1 has unexpected type 'QTreeWidgetItem'
作为父项传递,但我认为我需要引用正确的父项。
我已经将QTreeWidget
子类化了,并且在我的子类中它在QComboBox
上运行了一些基本操作,但是一旦我输入了我的子类QTreeWidget
的方法,底层的C对象对于包含QComboBox
的父QTreeWidgetItem
的删除(这就是为什么我认为它与设置QComboBox
的父级有关。)
我理解运行时错误中有9次是由于没有构造基类。但由于排除了这种错误,该怎么办?是不是因为没有引用正确的父母?
修改
当使用新的组合框选择时,我正在使用QComboBox发出信号。在新选择时,它将所选值添加到PyXB XML节点。有趣的是,只有当我将值附加到PyXB类绑定并将信息永久存储在XML文件中时,才会出现此问题。换句话说,如果代码的那部分没有运行,我就不会得到错误 - 只有当代码运行PyXB操作以将值附加到XML节点绑定时...
答案 0 :(得分:2)
我通常会避免在我的课程中引用所有可能被删除的对象(例如QComboBox
)的错误,因此在创建时请尝试self.comboBoxHolder = QComboBox(...)
之类的内容。