如何成为QEventLoop和winapi事件循环的朋友

时间:2016-05-25 08:21:26

标签: c++ qt winapi event-loop

我有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循环放在哪里?)
谢谢你的帮助

0 个答案:

没有答案