我刚刚发现了Qt 4.6中排队连接的有趣行为:
首先进行排队连接:
connect(someSender, SIGNAL(completed()), this, SLOT(handleCompletion()), Qt::QueuedConnection)
然后,某个发送者发送了信号:
emit completed()
在接收信号之前(当它在队列中时),我会断开与信号的连接:
disconnect(someSender, SIGNAL(completed()), this, SLOT(handleCompletion())
然而,handleCompletion插槽在下一个事件循环迭代中被调用。我可以通过在正确的位置使用someSender->blockSignals(true)来防止这种情况发生,但是这种做法感觉很糟糕,还有一些布尔标志可以禁用插槽的功能。
尤其是,我感到惊讶的是Qt文档中没有提到这种行为(至少我没有找到)。
最后的问题:有什么明智的方法可以避免这种情况发生吗?