21

如果我有一个 A 类,它的一个功能是:

void A::func()
{
    emit first_signal();
    emit second_signal();
}

假设一个 B 类有 2 个 slot,一个连接到first_signal,另一个连接到second_signal,是否保证连接到的 slotfirst_signal总是在slot之前second_signal被处理?

4

1 回答 1

15

如果您在信号和插槽之间使用直接连接类型(Qt::DirectConnection),那么答案是肯定的。

来自 Qt 帮助系统:

当一个信号发出时,连接到它的槽通常会立即执行,就像一个普通的函数调用一样。发生这种情况时,信号和槽机制完全独立于任何 GUI 事件循环。 一旦所有槽都返回,将在发出语句之后执行代码。使用排队连接时情况略有不同;在这种情况下,emit 关键字后面的代码将立即继续执行,而 slot 将在稍后执行。

您可以在QObject::connect方法中将默认连接类型更改为任何枚举 Qt::ConnectionType 。

于 2009-11-14T10:46:15.843 回答