我是否想念任何一个Qt
如果我替换功能QApplication::exec()
使用标准 Windows 消息循环实现?这应该可以澄清我的意思:
运行事件处理的常用“Qt”方式:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Window w;
w.show();
return a.exec();
}
运行事件处理的“Windows”方式:
#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
带有消息循环和a的程序(对Qt一无所知).dll
与 Qt GUI 和QApplication
内部实例,让外部消息循环可以吗?main.exe
处理 Qt GUI 的事件?
提前致谢!
EDIT 1:我会回答自己,以防它对某人有用:
我们有一个在 .NET 下用 C# 编写的主 .exe 模块,用于运行事件循环处理,并且有几个用 Qt/C++ 编写的 .dll,它们“内部”有一个 GUI(以及一个共享的 QApplication 实例)。 QApplication::exec() 从未被调用,但所有事件均由主 .exe (.NET) 模块的事件循环成功调度,并且所有 Qt 功能都存在(信号/槽、线程等)
EDIT 2:这适用于 Qt 4.8.2,但对于 Qt 5.1.0 情况略有不同。现在你必须调用 QApplication::processEvents() 一次因为它在第一次调用时执行一些初始初始化(在 GetMessage 或 PeekMessage 上安装 WindowsHook )。之后,无论谁在您的应用程序中调用 GetMessage Qt 事件都会获得进程,您就很幸运了:)