Qt系统托盘应用程序无法接收WM_QUERYENDSESSION或WM_ENDSESSION消息

时间:2018-01-26 12:45:23

标签: c++ windows qt

我是新手并编写了类似的内容:

class MyXcbEventFilter : public QAbstractNativeEventFilter
{
public:
MyXcbEventFilter():myWindow(Q_NULLPTR)
{}
void setMainWindow(QMainWindow* _mainWindow){
    myWindow=_mainWindow;
}

virtual bool nativeEventFilter(const QByteArray &eventType, void *message, long *) Q_DECL_OVERRIDE
{
        MSG * pMsg = static_cast<MSG *>(message);
        if (WM_ENDSESSION==pMsg->message||WM_QUERYENDSESSION==pMsg->message)
        {
            QSound::play(":/Sound/start.wav");
            if(myWindow!=Q_NULLPTR){
                myWindow->close();
            }
        }
    return false;
}
private:
QMainWindow* myWindow;
};

我想要做的是检测系统关闭并进行一些清理。

当应用程序窗口最大化时,代码正常工作,但当应用程序窗口最小化到系统托盘时,代码无法正常工作。

怎么了?

平台是:windows 10 64,Qt 5.7.1,MSVC2015

0 个答案:

没有答案