我想知道在Qt中,排队的事件和信号是否相同(它们不是从接收槽所在的线程发出的,因此被排队)。
所以,明确一下,我们有:
- 一个事件队列 - 一个信号队列(由于在不同的线程中发射/接收,不能直接执行) 还是只有一个事件和信号队列?
所以,明确一下,我们有:
- 一个事件队列 - 一个信号队列(由于在不同的线程中发射/接收,不能直接执行) 还是只有一个事件和信号队列?
这里有一个单一的队列。invokeMethod() 会产生一个QEvent,它是一个“QMetaCallEvent”。它的事件索引为43,在这里可以看到:QEvent::MetaCall
:
http://doc.qt.io/qt-5/qevent.html#Type-enum
它被放入队列中,在qmetaobject.cpp
中... 在“调用”触发对 QApplication 的 postEvent 调用。 这是该行的链接 /src/corelib/kernel/qmetaobject.cpp
的第2228行
没有传递“优先级”参数,因此信号/槽调用始终为 Qt::NormalEventPriority。
这些细节在文档中并没有被很好地契约化,因此我建议对未来各种平台和版本的行为不要过于假设。如果您需要一个严格的合同来规定程序某部分中事件处理的顺序,最好编写自己的显式协议。