[PySide] Problems with QStyle deletion

John Ehresman jpe at wingware.com
Mon Dec 10 17:03:51 CET 2012


On 11/26/12 1:49 PM, John Ehresman wrote:
> I've been looking further into this and am wondering why either the
> destroyed signal and/or QWeakPointer are not used.  Is there a reason
> why they're not used?

I think there's a way to receive notification just before a QObject
derived object is deleted and that is to set a property on the QObject
that invalidates the wrapper when it is deleted.  I've done this in a
couple of experimental repositories I've set up at:
  https://bitbucket.org/jpe/experimental-shiboken.git
  https://bitbucket.org/jpe/experimental-pyside.git

I modified shiboken to generate conversion functions that use a new
PySide::getWrapperForQObject call to get a wrapper for a QObject derived
object and then defined it in this commit:
https://bitbucket.org/jpe/experimental-pyside/commits/81f87c89af07e8129d325109b852bedf

All tests that previously passed also pass with this change, at least on
OS X.

I also added an optional debug only hook to detect failures to
invalidate wrappers before deleting objects.  This is defined in the
first part of bindingmanager.cpp -- see
https://bitbucket.org/jpe/experimental-shiboken/src/156b7b4f1a71f2ff8330d67993b8a8dd268886f8/libshiboken/bindingmanager.cpp?at=use-qobject-property-to-invalidate

I'll be submitting these changes in chunks to codereview in a few days
unless I get feedback as to why they're a bad idea or that there's a
better way to do this.  In my view, these object lifecycle problems are
critical problems; I've spent a lot of time debugging seemingly random
crashes and then carefully rewriting code so it doesn't segfault.  I
think there can be a generic solution.

Thanks,

John



More information about the PySide mailing list