Я пытаюсь избежать известного PyQt Runtime Ошибка, когда основной C/C++ объект удален:PyQt Ошибка в QTreeWidgetItem
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()
методом QTreeWidget
), но я не могу установить родителя как QTreeWidgetItem
что содержит его. Когда я пытаюсь, я получаю следующее сообщение об ошибке:
TypeError: QComboBox(QWidget parent=None): argument 1 has unexpected type 'QTreeWidgetItem'
Конечно, я могу либо опускаем родителя в конструкторе или скоротать QTreeWidget
в качестве родителя, но я думаю, что мне нужно ссылаться на правильный родитель.
Я подклассы QComboBox
и в моем подклассу она выполняет некоторые основные операции на QTreeWidget
, но как только я вхожу методы моего подклассы QComboBox
, базовый объект C для родительского QTreeWidgetItem
, содержащий QComboBox
удаляется (который поэтому я думаю, что это связано с установкой родителя QComboBox
).
Я понимаю, что 9 раз из 10 ошибка времени выполнения из-за не построения базового класса. Но с этим исключено, как иначе может произойти ошибка? Может быть, из-за не ссылки на правильный родитель?
EDIT
Я использую QComboBox сигнализировать, когда новый выбор выпадающий был сделан. При новом выборе он добавляет выбранное значение в узел PyXB XML. Интересно, что эта проблема возникает только в том случае, если я добавляю значение к привязке класса PyXB, которое постоянно хранит информацию в файле XML. В других словах, если эта часть кода не выполняется, я не получаю ошибку - ее только тогда, когда код запускает операцию PyXB для добавления значения к привязке узла XML ...
Просьба представить минималистический рабочий пример, чтобы продемонстрировать проблему. Существует не так много надежды на решение вашей проблемы, не видя полного рабочего примера. –
Да, я согласен, но к тому времени, когда я чуть ли не собрал краткий рабочий пример, я понял, что решение имеет тот же ход мысли, что и ответ xndrme. Мой код большой, и поэтому вместо того, чтобы давать подробное объяснение этому, достаточно сказать, что вы всегда должны сохранять ссылку, особенно абсолютного виджета верхнего уровня на уровне иерархии (чего и не было в моем случае) , – ecoe
Да, я думал, что это может быть так. Ошибка, которую вы видели, обычно всегда, потому что вы не сохранили ссылку где-нибудь там, где должны были быть. Рад, что вы его отсортировали :) –