[PyKDE] Issue with QDialog and lifetime

Giovanni Bajo rasky at develer.com
Thu Jul 7 14:14:25 BST 2005

Phil Thompson <phil at riverbankcomputing.co.uk> wrote:

> 1. Either add an optional parameter to exec_loop() which does the transfer
> or have exec_loop_and_transfer() (or something less of a mouthful). At
> least that way it won't break existing code.

I like this solution. Then I can do:

class QDialog(QDialog):
    exec_loop = QDialog.exec_loop_and_transfer
sys.modules["qt"].__dict__("QDialog") = QDialog

> Either way, I don't think it can be done (to my satisfaction)
> transparently. The programmer is going to have to be aware of the issue
> and explicitly deal with it.

For the backward compatibility issue, PyQt4 looks like a good point of
change. I can't help though with the consistency issue you raised:
consistency is in fact important, but non-leaking code is important too. I
suggest you sacrifice a little consistency in PyQt4 and make this the
default behaviour, together with a exec_loop_and_not_transfer() (or

I believe however is trained enough to understand the lifetime issues in
PyQt can also cope with QDialog's exec_loop transferring ownership by
default. Instead, those who do not master the lifetime issues will just have
their code working with no leaks without thinking of this.
Giovanni Bajo

More information about the PyQt mailing list