Qt5.10 PC和Mac系统休眠,检测

最近在开发过程中,遇到对系统休眠有要求,查看帮助文档,有了点发现:

[virtual protected]bool QWidget::nativeEvent(const QByteArray &eventType, void *message, long *result)
This special event handler can be reimplemented in a subclass to receive native platform events identified by eventType which are passed in the message parameter.
In your reimplementation of this function, if you want to stop the event being handled by Qt, return true and set result. If you return false, this native event is passed back to Qt, which translates the event into a Qt event and sends it to the widget.
Note: Events are only delivered to this event handler if the widget is has a native Window handle.
Note: This function superseedes the event filter functions x11Event(), winEvent() and macEvent() of Qt 4.

have a try:

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
protected:
    bool nativeEvent(const QByteArray &eventType, void *message, long *result) Q_DECL_OVERRIDE;

private:
    Ui::MainWindow *ui;
};

bool MainWindow::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
    Q_UNUSED(result);

    if (eventType == "windows_generic_MSG") {
#ifdef Q_OS_WIN32
        MSG* msg = static_cast<MSG*>(message);
        if (msg->message == WM_POWERBROADCAST
                && msg->wParam == PBT_APMSUSPEND) {
           //TODO:add your codes
        }
#endif
    } else if (eventType == "NSEvent") {
#ifdef Q_OS_MACOS
        //TODO: add your codes
#endif
    }

    return false;
}

在头文件中需要加上:

#ifdef Q_OS_WIN32
#include "Windows.h"
#endif

对应Mac检测系统休眠唤醒可以参考:Mac系统休眠唤醒

值得注意的是:这个操作需要加在主窗口里面。

具体源码:点击打开链接



猜你喜欢

转载自blog.csdn.net/u013015629/article/details/80348371