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ウィジェットを追加しているという事実が原因であるかどうか疑問に思っていますが、それを含む として親を設定できません。試してみると、次のエラーが表示されます。QTreeWidgetItemsetItemWidget()QTreeWidgetQTreeWidgetItem

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

もちろん、コンストラクターで親を省略するか、親QTreeWidgetとして渡すことができますが、正しい親を参照する必要があると思います。

をサブクラスQComboBox化し、サブクラスで に対していくつかの基本的な操作を実行しますが、サブクラス化されQTreeWidgetた のメソッドに入るとすぐに、を含むQComboBox親の基になる C オブジェクトが削除されます (これが、何かを考えている理由です)。の親を設定してください)。QTreeWidgetItemQComboBoxQComboBox

実行時エラーの 10 回中 9 回は、基本クラスが構築されていないことが原因であることを理解しています。しかし、それが除外された場合、他にどのようにエラーが発生するのでしょうか? 正しい親を参照していないことが原因でしょうか?

編集

QComboBox を使用して、新しいコンボボックスが選択されたときに通知します。新たに選択すると、その選択された値が PyXB XML ノードに追加されます。興味深いことに、この問題は、情報を XML ファイルに永続的に格納する PyXB クラス バインディングに値を追加した場合にのみ発生します。つまり、コードのその部分が実行されない場合、エラーは発生しません。コードが PyXB 操作を実行して、XML ノード バインディングに値を追加する場合にのみ発生します...

4

1 に答える 1

2

私は通常、クラスで、あなたのように削除される可能性のあるすべてのオブジェクトへの参照を保持するようなエラーを回避するので、作成時に次QComboBoxのようなことを試してください。self.comboBoxHolder = QComboBox(...)

于 2014-01-29T21:05:07.433 に答える