Problem with Qt::QueuedConnection, signal delivered after disconnect

Posted by lutku on Stack Overflow See other posts from Stack Overflow or by lutku
Published on 2010-03-28T08:50:54Z Indexed on 2010/03/28 8:53 UTC
Read the original article Hit count: 379

Filed under:

Hi,

I just discovered interesting behavior of queued connection in Qt 4.6:

First queued connection is made:

connect(someSender, SIGNAL(completed()), this, SLOT(handleCompletion()), Qt::QueuedConnection)

Then someSender sends the signal:

emit completed()

Before receiving signal (as it is in queue), I disconnect from the signal:

disconnect(someSender, SIGNAL(completed()), this, SLOT(handleCompletion())

Still, handleCompletion slot is invoked at next eventloop iteration. I can prevent this from happening by using someSender->blockSignals(true) at correct point, but it feels awful not to mention having some boolean flag to disable slot's functionality.

Especially, I feel amazed that this behavior is not mentioned in Qt documentation (at least I haven't found).

Finally the question: any sensible way to avoid this from happening?

© Stack Overflow or respective owner

Related posts about qt