[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