如果我有一个 A 类,它的一个功能是:
void A::func()
{
emit first_signal();
emit second_signal();
}
假设一个 B 类有 2 个 slot,一个连接到first_signal
,另一个连接到second_signal
,是否保证连接到的 slotfirst_signal
总是在slot之前second_signal
被处理?
如果我有一个 A 类,它的一个功能是:
void A::func()
{
emit first_signal();
emit second_signal();
}
假设一个 B 类有 2 个 slot,一个连接到first_signal
,另一个连接到second_signal
,是否保证连接到的 slotfirst_signal
总是在slot之前second_signal
被处理?
如果您在信号和插槽之间使用直接连接类型(Qt::DirectConnection),那么答案是肯定的。
来自 Qt 帮助系统:
当一个信号发出时,连接到它的槽通常会立即执行,就像一个普通的函数调用一样。发生这种情况时,信号和槽机制完全独立于任何 GUI 事件循环。 一旦所有槽都返回,将在发出语句之后执行代码。使用排队连接时情况略有不同;在这种情况下,emit 关键字后面的代码将立即继续执行,而 slot 将在稍后执行。
您可以在QObject::connect方法中将默认连接类型更改为任何枚举 Qt::ConnectionType 。