Win32 API有一个PostMessage
函数,它将消息发布到GUI消息队列的末尾,以便稍后从GUI线程处理,而不是SendMessage
发送和处理消息同步与调用线程。
是否有PostMessage
功能的Qt解决方案?同事建议Qt的服务器/套接字实现可以提供它;这是一种合理的方法吗?
答案 0 :(得分:8)
答案 1 :(得分:7)
看看QTimer::singleShot。在您的情况下,您希望将msec
值0
用于{{1}},这应该提供相同的功能。 (这通常用于实现延迟初始化,直到GUI事件循环运行)
答案 2 :(得分:6)
与QTimer解决方案类似,但具有可以传递参数的优点,是QMetaObject :: invokeMethod方式:
QString SomeClass::compute(const QString&, int, double);
...
QMetaObject::invokeMethod(obj, "compute", Qt::QueuedConnection,
Q_RETURN_ARG(QString, retVal),
Q_ARG(QString, "sqrt"),
Q_ARG(int, 42),
Q_ARG(double, 9.7));
QueuedConnection在事件循环中对其进行排队,DirectConnection将立即执行它。
答案 3 :(得分:4)
到目前为止所有答案都很好,我只想补充一点,你也可以使用connect()
和Qt::QueuedConnection
作为连接类型。