[PyQt] Ownership disconnect with "temporary" python objects?

Johan Fläckman flackman.johan at gmail.com
Thu Apr 16 08:32:03 BST 2015


Hi, I have a strange crash in PyQt5 and I'm not sure if the error is in my
buildscripts or in PyQt.
I have built Qt5, PyQt5 and SIP myself with msvc2010 / python 2.7

PyQt 5.4.1
Qt 5.4.1
SIP 4.16.7

My compiled version seems to work fine in almost all cases but I have this
one crash that shows something went wrong.
Here's a minimal script that reproduce the crash (imports etc omitted):

*a = PyQt5.QtWidgets.QApplication(sys.argv)*
*w = PyQt5.QtWidgets.QMainWindow();*

*res = w.menuBar().addMenu( PyQt5.QtWidgets.QMenu( "foo" ) )*

*print **res**                     # <---- PyQt5.QtWidgets.QAction object
at 0x000000000279E3A8*
*sip.isdestroyed(res)    # <---- False*
*sip.ispyowned(res)     # <----- False*
*sip.dump(res)            # <----- Crash (res already destroyed in C++)*


>From what I can tell from debugging:
The QMenu instance passed to addMenu is deconstructed (both in python and
in C++) before res is assigned in python.
The menu's QAction is destroyed in C++ during (or right after) the
deconstruction of the QMenu but res is assigned a python instance of a
QAction that thinks this C++ representation still exists.

I can *not *reproduce this crash with the prebuilt python 3.4 and the
riverbank-pyqt5 binaries but I *can *reproduce it with any prebuilt
"unofficial" pyqt5/python27 binaries I could find scattered around the
internet. The crash is reproducible in both debug and non-debug builds.

Has anyone else encountered this or can confirm that their python27/pyqt5
version can run this code?

Thanks,
Johan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20150416/dc9b1813/attachment.html>


More information about the PyQt mailing list