我有MyApp
类,其中包含winapi事件循环
class MyApp : public QObject {
Q_OBJECT
public:
int WINAPI exec() {
MSG msg;
int nRetVal;
while ((nRetVal = ::GetMessage(&msg, nullptr, 0, 0)) != 0 && nRetVal != -1) {
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
return msg.wParam;
}
};
当我启动我的程序时,QObject
的事件不会被处理(无法调用任何插槽,因此发送信号)。
在互联网上的某个地方,我发现了一种解决方案 - 创建一个QApplication
对象,所以它以某种方式"挂钩"到winapi消息循环,它工作:
int main(int _argc, char* _argv[]) {
QApplication qa(_argc,_argv);
UNREFERENCED_PARAMETER(qa);
MyApp mapp();
return mapp.exec();
}
但在我看来,设计是脆弱的和黑客。我不喜欢我使用一些未记录的功能,从不调用QApplication.exec()
方法。
你能告诉我怎么做正确的方法吗?也就是说,我只想调用一个exec方法(我猜它会是QApplication
的一个,但是我应该把winapi循环放在哪里?)
谢谢你的帮助