假设我有一个Qt应用程序,其中有以下内容:
connect(A, SIGNAL(a()), B, SLOT(b1()));
connect(A, SIGNAL(a()), B, SLOT(b2()));
...
void B::b1() {
A->disconnect();
}
如果发出了调用
a()
的信号,那么在B::b1()
中断开所有与A连接的槽之后,槽B::b2()
是否仍然会被调用?因为它们都响应于同一个信号。假设这两个对象都在同一个线程中,因此我们有一个直接连接。我知道
disconnect()
将断开所有与A的信号连接,但我不确定emit是否只是计划调用b1和b2槽,然后调用它们,以便对连接进行更改,直到两个槽(因此是emit)返回。所以它可以实现如下:emit:
make temprorary copy of signal's slot table
foreach element in temporary slot table: call
disconnect:
clear signal's slot table
否则,您可能会遇到数据结构完整性问题。