On Thu, 5 Aug 2010 03:10:50 -0400, Luke Campagnola <[email protected]> wrote: > I believe I have run into a class of bugs in PyQt4. I originally found that > QSpinBox.lineEdit() returns a QLineEdit instance which does not maintain > its > reference count properly after the original QSpinBox is deleted. Thus it is > possible to either 1) have uncollectable LineEdits lingering in memory, or > 2) crash the program by accessing the LineEdit (see example below). > > The same bug also applies to: > - QAbstractSpinBox.lineEdit > - QComboBox.lineEdit, > - QAbstractScrollArea.horizontalScrollBar > - QAbstractScrollArea.verticalScrollBar > - QTreeView.header > - QSplitter.handle > > .. and likely many others. In the best case, this bug causes minor memory > leaks that few people are likely to notice. In the worst case, it causes > crashes which are very difficult to debug if you don't have easy access to > debugging symbols (ie using windows binaries). > > $ python >>>> from PyQt4.QtGui import * >>>> a = QApplication([]) >>>> s = QSpinBox() >>>> l = s.lineEdit() >>>> del s >>>> l.text() > Segmentation fault
These are refer to objects created (and still owned) by C++. They are destroyed by C++ when (for example) the QSpinBox is deleted. There is nothing that can be done about that. Because they are created by C++, PyQt cannot (easily) work out when they get deleted. If it could then you would get an exception about the C++ object no longer existing instead of a crash. Either way, the real problem is a bug in your code. Phil _______________________________________________ PyQt mailing list [email protected] http://www.riverbankcomputing.com/mailman/listinfo/pyqt
