Windows消息循环代替QApplication::exec() / QApplication::processEve
Windows message loop instead of QApplication::exec() / QApplication::processEvents()
如果我用标准的Windows消息循环实现替代QApplication::exec()
,我会错过任何Qt
功能吗?这应该能澄清我的意思:
通常的"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
程序(对Qt一无所知)与消息循环和.dll
与Qt GUI和QApplication
实例里面,它可以让外部消息循环从main.exe
来处理Qt GUI的事件吗?提前感谢!
编辑1:我自己回答吧,以防对别人有用:我们有一个主要的。exe模块在。net下用c#编写,运行事件循环处理,我们有几个用Qt/c++编写的。dll,"内部"有一个GUI(和一个共享的QApplication实例)。QApplication::exec()永远不会被调用,但是所有的事件都被主.exe (. net)模块的事件循环成功地调度,并且所有的Qt功能都存在(信号/槽,线程等)
编辑2:这在Qt 4.8.2中工作,但在Qt 5.1.0中情况略有不同。现在您必须调用QApplication::processEvents()一次,因为它在第一次调用时执行一些初始化(在GetMessage或PeekMessage上安装WindowsHook)。之后,谁调用GetMessage在您的应用程序Qt事件得到进程,你是金色的:)
我想到的第一件事是跨线程调用槽不会工作,因为Qt事件循环正在执行这些调用。
但更重要的问题可能是:为什么你想这样做,尤其是在qeventdispatcher_win.cpp中做本质上相同的事情?
- 为什么我会收到"Run-Time Check Failure #2 - Stack around the variable 'pr' was corrupted"错误?
- 从插槽调用 QApplication::p rocessEvents 会导致再次调用同一插槽
- 如何在QApplication中应用QLibraryInfo中加载的库和插件配置
- 如何为应用程序中的某些按钮重置QApplication::styleSheet?
- QApplication::p rocessEvents 在不同的线程上
- 在运行时将更改的环境变量应用于 QApplication
- 如何声明从 QApplication 派生的 Qt 类并覆盖通知函数?
- 如何"Re-Polish"相同风格的QApplication?
- QT和新的信号槽语法,QApplication::退出主功能外的插槽
- QT 5 [ 错误: QtGui/QApplication: 没有这样的文件或目录]
- 在 C++ 中,为什么 a=*pr++,c=pr++,a 是 *pr 而不是 *c
- 使用带有 QApplication 的视觉检漏仪
- Qt5 对'QApplication::QApplication(int&, char**, int)'的未定义引用
- Qt/Qml - 触发 QApplication/QQmlApplicationEngine 事件(键和鼠标事件)
- 模仿 QApplication::p alette() 基于颜色样式的行为
- 完全删除 QApplication 实例并在另一个线程中重新创建它
- 将 argc 和 argv 传递给 QApplication 到单元测试用例方法中
- 创建真正的无头 QApplication 实例
- Qapplication中没有成员ARGC和ARGV
- 使用QTS QXMLSCHEMAVALIDATOR而无需qapplication