[PyKDE] Issue with QDialog and lifetime

James Emerton ephelon at gmail.com
Thu Jun 23 01:36:25 BST 2005


Sorry to be digging up such an old thread, but my mind keeps coming
back to this one.

Does anyone see a potential problem with exec_loop() transferring
ownership of the dialog instance back to Python?

James

On 5/25/05, Giovanni Bajo <rasky at develer.com> wrote:
> Hello,
> 
> while the QObject object model is pretty clear to me, and I also understand
> the way it was translated to Python, today I stumbled upon an issue which I
> hadn't realized before:
> 
> class MyMainWindow(QMainWindow):
>     def about(self):
>          dlg = MyAboutDlg(self)
>          dlg.exec_loop()
> 
> This way of using modal dialog is not safe because the dialog is not
> deallocated after usage! In fact, its lifetime is bound to that of the main
> window. In fact, the code above is equivalent to:
> 
> void MyMainWindow::about(void)
> {
>     MyAboutDlg* dlg = new MyAboutDlg(this);
>     dlg->exec();
> }
> 
> Instead, the idiomatic way of using modal dialogs in C++ is:
> 
> void MyMainWindow::about(void)
> {
>     MyAboutDlg dlg(this);
>     dlg.exec();
> }
> 
> which has not direct translation in Python.
> 
> I would like to stress that this is not a general complaint against the way
> PyQt handles lifetime issues (which is kind of perfect, IMO), but a nasty
> side-effect which happens only for modal dialogs because of the way they are
> idiomatically used (allocated on the stack to be automatically destroyed
> when the calling function exits).
> 
> So, I don't see any easy way to take care of this automatically. One has to
> remember to manually destroy the dialog calling deleteLater (which kind of
> sucks because it means that we are back to manually memory management for
> dialogs), or creating the dialog with Qt.WDestructiveClose (but then it is
> impossible to access the result() of the dialog after exec_loop() exits).
> 
> Suggestions? I guess this issue should be highlighted in the documentation.
> --
> Giovanni Bajo
> 
> _______________________________________________
> PyKDE mailing list    PyKDE at mats.imk.fraunhofer.de
> http://mats.imk.fraunhofer.de/mailman/listinfo/pykde
>




More information about the PyQt mailing list