Ich habe gerade ein interessantes Verhalten der Warteschlangenverbindung in Qt 4.6 entdeckt:
Die erste Verbindung in der Warteschlange wird hergestellt:
connect(someSender, SIGNAL(completed()), this, SLOT(handleCompletion()), Qt::QueuedConnection)
Dann sendet someSender das Signal:
emit completed()
Bevor ich das Signal empfange (da es sich in der Warteschlange befindet), trenne ich die Verbindung zum Signal:
disconnect(someSender, SIGNAL(completed()), this, SLOT(handleCompletion())
Dennoch wird der Slot handleCompletion bei der nächsten Iteration der Ereignisschleife aufgerufen. Ich kann dies verhindern, indem ich someSender->blockSignals(true) an der richtigen Stelle verwende, aber es fühlt sich schrecklich an, nicht zu erwähnen, dass ich ein boolesches Flag habe, um die Funktionalität des Slots zu deaktivieren.
Insbesondere bin ich erstaunt, dass dieses Verhalten nicht in der Qt-Dokumentation erwähnt wird (zumindest habe ich es nicht gefunden).
Schließlich die Frage: Gibt es eine sinnvolle Möglichkeit, dies zu verhindern?