首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Windows消息循环,而不是QApplication::exec() / QApplication::processEvents()

Windows消息循环,而不是QApplication::exec() / QApplication::processEvents()
EN

Stack Overflow用户
提问于 2013-05-14 10:25:42
回答 1查看 3.5K关注 0票数 12

如果我用标准的Qt消息循环实现替代QApplication::exec(),我会错过任何QApplication::exec()功能吗?这应该能澄清我的意思:

运行事件处理的通用“Qt”方法:

代码语言:javascript
运行
复制
int main(int argc, char *argv[])
{
 QApplication a(argc, argv);
 Window w;
 w.show();
 return a.exec();
}

运行事件处理的“Windows”方式:

代码语言:javascript
运行
复制
#include <Windows.h>

int main(int argc, char *argv[])
{
 QApplication a(argc, argv);
 Window w;
 w.show();

 MSG msg;
 while(GetMessage(&msg, 0, 0, 0)){
    TranslateMessage(&msg);
    DispatchMessage(&msg);
 }

 return msg.wParam;
}

上面的示例演示了与QApplication实例有关的外部消息循环,而QApplication实例本身甚至根本没有自己的事件循环。

换句话说,如果我有带有消息循环的main.exe程序(对Qt一无所知),以及包含Qt和QApplication实例的.dll,那么可以让来自main.exe的外部消息循环来处理Qt的事件吗?提前感谢!

编辑1: --如果这对某人有用的话,我只会回答自己:我们有一个在.NET下用C#编写的主.exe模块,它运行事件循环处理,还有一对用Qt/C++编写的.dlls,它们有一个“内部”的GUI (以及一个共享的QApplication实例)。QApplication::exec()从不调用,但所有事件都由主.exe (.NET)模块的事件循环成功地分派,所有的Qt功能都存在(信号/时隙、线程等)。

编辑2:对QT4.8.2起作用的,但对于QT5.1.0则有点不同。现在,必须调用QApplication::processEvents()一次,因为它对第一个调用执行一些初始初始化(在GetMessage或PeekMessage上安装WindowsHook )。在此之后,无论谁在应用程序Qt事件中调用GetMessage,都会得到进程,您就是黄金:)

EN

回答 1

Stack Overflow用户

发布于 2013-05-14 13:44:52

我想到的第一件事是跨线程调用插槽不能工作,因为Qt事件循环正在执行这些调用。

但是更重要的问题可能是:为什么要这样做,特别是在qeventdispatcher_win.cpp中,基本上是一样的事情?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16540743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档