1

当底层 C/C++ 对象被删除时,我试图避免众所周知的 PyQt 运行时错误:

http://www.riverbankcomputing.com/pipermail/pyqt/20​​09-April/022809.html

PyQt4 - “RuntimeError:底层 C/C 对象已被删除”

PyQt4 嵌套类 - “RuntimeError:底层 C/C++ 对象已被删除”

PyQt:RuntimeError:包装的 C/C++ 对象已被删除

我的每个子类都调用该super()方法,因此基类构造正确。

尽管如此,我还是收到了这个错误,我想知道这是否是因为我向 a 添加了一个QComboBox小部件QTreeWidgetItem(使用 a 的setItemWidget()方法QTreeWidget),但我无法将父级设置为QTreeWidgetItem包含它的那个。当我尝试时,我收到以下错误:

TypeError: QComboBox(QWidget parent=None): argument 1 has unexpected type 'QTreeWidgetItem'

当然,我可以在构造函数中省略父级,也可以将其QTreeWidget作为父级传递,但我认为我需要引用正确的父级。

我已经对QComboBox和 在我的子类中运行了一些基本操作QTreeWidget,但是一旦我进入我的子类的方法QComboBoxQTreeWidgetItem包含QComboBox与设置QComboBox) 的父级有关。

我理解 10 次中有 9 次运行时错误是由于未构造基类所致。但是排除了这一点,错误怎么会发生呢?可能是因为没有引用正确的父母吗?

编辑

我正在使用Qcombobox发出新的组合选择来发出信号。在进行新选择时,它将选择的值添加到 PyXB XML 节点。有趣的是,仅当我将值附加到 PyXB 类绑定中,将信息永久存储在 XML 文件中时,才会出现此问题。换句话说,如果代码的那部分没有运行,我不会收到错误 - 只有当代码运行 PyXB 操作以将值附加到 XML 节点绑定时...

4

1 回答 1

2

我通常会避免这种错误,在我的类上保留对所有容易被删除的对象的引用,就像你创建它时QComboBox那样尝试。self.comboBoxHolder = QComboBox(...)

于 2014-01-29T21:05:07.433 回答