[Qt-interest] destroyed SLOT

John McClurkin jwm at nei.nih.gov
Wed Oct 21 16:15:34 CEST 2009


Andre Somers wrote:
> Thiago Macieira wrote:
>> Em Quarta-feira 21 Outubro 2009, às 09:17:44, você escreveu:
>>  
>>> Is there *ever* a reason why handleClose() would not be called here:
>>>
>>> settingsWidget_ = new QWidget;
>>> QObject::connect( settingsWidget_, SIGNAL(destroyed()), this,
>>> SLOT(handleClose()));
>>> delete settingsWidget_;
>>>
>>> A lot of my objects have settingsWidgets_'s and in all cases but one
>>> handleClose() gets called when they get deleted.  I'm at a bit of a
>>> loss.  How should I go about debugging this?  I've tried
>>> dumpObjectInfo() but it doesn't print anything (even in debug) and the
>>> connect call returns true.  Any thoughts would be great.  I'm on hour
>>> 10 of  this problem :)
>>>     
>>
>> Yes, the reason is the C++ language.
>>
>> The destroyed(QObject*) signal is emitted from the QObject and QWidget 
>> destructors. That means that, when they are emitted, your object *is* 
>> a QObject or a QWidget. It no longer has a method called "handleClose".
>>
>> Therefore, handleClose cannot be called.
>>
>> You must never connect the destroyed(QObject*) signal to "this". You 
>> have to connect it to another object.
>>
>>   
> As I read the code, the connection is made from another object than the 
> one that is being destroyed. The object pointer for the signal is not 
> this, but settingsWidget_. That would invalidate your explanation in 
> this case, would it not? Unless of course settingsWidget_ is a child 
> widget of this.
> 
> André
Also if this is a child of settingsWidget?



More information about the Qt-interest-old mailing list