Sorry found destroyed() - that's what happens when you reply to emails before you have morning coffee. Anyway I'm not sure why destroyed() is never fired. I tried your code and even modified it a bit to use the new style slots and signals but it's not being fired.
Either way, I think the other points I raised in my last email are still valid. IMHO using destroyed() in python is the wrong approach. On Thu, Apr 7, 2011 at 11:02 AM, Demetrius Cassidy <dcassid...@gmail.com>wrote: > I truly believe you are approaching this from the wrong angle. If you need > to know when your QDialog is going away, you override closeEvent and do your > cleanup from there. > > However, looking through the docs, it does not appear that destroy is > actually a signal. It's called from the QWidget dtor, so it makes sense that > if you call destroy(), you get the runtime error because you are deleting > the C++ object before the Python object. Do not call destroy yourself - call > self.close and override closeEvent. From there you can accept or reject > closing the dialog, and do any cleanup prior to your dialog being destroyed. > > From the Qt Docs: > > void QWidget::destroy ( bool destroyWindow = true, bool destroySubWindows = > true ) [protected] > > Frees up window system resources. Destroys the widget window if > destroyWindow is true. > > destroy() calls itself recursively for all the child widgets, passing > destroySubWindows for the destroyWindow parameter. To have more control over > destruction of subwidgets, destroy subwidgets selectively first. > > This function is usually called from the QWidget destructor. > > On Thu, Apr 7, 2011 at 3:04 AM, Rui DaCosta <ru...@yahoo.com> wrote: > >> I know it can close it manually, the problem is that this is a >> simplification of a problem I had, in which we were expecting the QDialog to >> close as per the docs, but it did not. >> The *real* problem we are facing, is a bit further down the line, where we >> are getting the "RuntimeError: underlying C/C++ object has been deleted" >> but we never receive a destroyed signal. >> The only reason I need this signal or event is to do some teardown code >> for some callbacks to avoid getting this c++ error elsewhere. >> >> ------------------------------ >> *From:* Demetrius Cassidy <dcassid...@gmail.com> >> *To:* RuiDC <ru...@yahoo.com> >> *Sent:* Thu, 7 April, 2011 0:39:33 >> *Subject:* Re: [PyQt] why do closeEvent and destroyed slot not get called >> on accepting PyQt4 QDialog? >> >> If you want to close, just call self.close. It's a slot, so you can map it >> to any signal. Also not sure why you want to know when your widget is >> destroyed? Let Python take care of it, you should not need to call >> sip.delete yourself. closeEvent is there if you need to know _when_ your app >> was requested to close. If you want to allow or reject closing the app, you >> need to use the QEvent object which gets passed to that function. >> >> On Wed, Apr 6, 2011 at 5:27 PM, RuiDC <ru...@yahoo.com> wrote: >> >>> >>> The question & code are here: >>> >>> http://stackoverflow.com/questions/5570402/why-do-closeevent-and-destroyed-slot-not-get-called-on-accepting-pyqt4-qdialog >>> >>> but hopefully someone here can give me an answer on: >>> 1. how to get the closeEvent to fire from accepting (or do I have to do a >>> self.close()?) >>> 2. how to get the destroyed message to print (or do I have to go through >>> sip.delete(my_widget)?) >>> 3. why, if I comment out the del my_widget, and uncomment the >>> my_widget.destroy() I get a: >>> RuntimeError: underlying C/C++ object has been deleted >>> on the destroy() without the print! i.e. how is it that it can be >>> destroyed >>> but not raise the signal? >>> >>> Thanks in advance, >>> R >>> -- >>> View this message in context: >>> http://old.nabble.com/why-do-closeEvent-and-destroyed-slot-not-get-called-on-accepting-PyQt4-QDialog--tp31336229p31336229.html >>> Sent from the PyQt mailing list archive at Nabble.com. >>> >>> _______________________________________________ >>> PyQt mailing list PyQt@riverbankcomputing.com >>> http://www.riverbankcomputing.com/mailman/listinfo/pyqt >>> >> >> >
_______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt