等待SLOT用Qt完成执行

bam*_*500 2 qt signals-slots

在我的代码中,我发出一个信号(mySignal),我想在它继续之前等待连接槽(mySlot)执行的结束:

emit mySignal();
// Wait for the end of mySlot execution...

// Some code that has to be executed only after the end of mySlot execution...
Run Code Online (Sandbox Code Playgroud)

有办法吗?

Ben*_*n T 6

如果发送方和接收方都在同一个线程中使用Qt::DirectConnection,如果它们在2个不同的线程中使用Qt::BlockingQueuedConnection.

ClassA a;
ClassB b;
ClassC c;
c.moveToThread(aThread);
QObject::connect(&a, &ClassA::signal, &b, &ClassB::slot, Qt::DirectConnection);
QObject::connect(&a, &ClassA::signal, &c, &ClassC::slot, Qt::BlockingQueuedConnection);
Run Code Online (Sandbox Code Playgroud)

请注意,如果出现以下情况,您必须断开/重新连接:

  • 发送者和接收者最终都是同一个线程而他们以前没有,或者你将有一个死锁.
  • 发送者或接收者最终在两个不同的线程中,他们以前在同一个线程中.

Qt::DirectConnection就是,如果发送者和接收者是在同一个线程默认的(见的Qt ::自动连接).