什么时候调用Qt插槽?

use*_*020 3 c++ qt signals-slots

例如,我有一个功能

void A::fun()
{
    do_1();
    emit signal_1();

    do_2();
    emit signal_2();

    do_3();
}
Run Code Online (Sandbox Code Playgroud)

signal_1和之间有联系slot_1; 之间signal_2slot_2.当在slot_1slot_2叫什么名字?一些答案选项:

  1. 有趣的回归之后,调用slot_1之前slot_2;
  2. slot_1之后调用do_1并被slot_2调用 do_2

或其他人.

fbu*_*cek 6

对于直接连接(默认情况下不从不同的线程连接)

立即调用插槽,因此结果应为:

do_1
slot_1
do_2
slot_2
do_3
Run Code Online (Sandbox Code Playgroud)

对于从同一线程调用的排队连接(需要手动设置)

必须结束函数的执行,然后主循环才能调用插槽

do_1 
do_2 
do_3 
slot_1    
slot_2 
Run Code Online (Sandbox Code Playgroud)

对于从不同线程调用的排队连接

由于线程问题,它更复杂.结果可以类似于第一个或第二个示例(或组合).你无法保证它会有什么样的通话顺序!

do_1 
slot_1    
do_2 
do_3 
slot_2 
Run Code Online (Sandbox Code Playgroud)

在这里您可以看到Qt :: ConnectionType的描述