【问题标题】:How to Handle Windows Messages using QCoreApplication::winEventFilter如何使用 QCoreApplication::winEventFilter 处理 Windows 消息
【发布时间】:2012-06-25 23:00:55
【问题描述】:

我正在尝试使用 QT Creator、QT SDK 和 Windows API 在我的 QT 应用程序中实现 winEventFilter

在我的类文件中声明如下

bool winEventFilter( MSG * msg, long * result )
{
    if( msg->message == WM_QUERYENDSESSION)
        DebugLog("shutdown");
    else
        DebugLog("Quit") ;    
}

我是通过以下方式调用上面的方法

MSG * msg;
long * result;

winEventFilter(msg, result);

当我注销或关闭计算机时,它从不打印日志shutdown

【问题讨论】:

    标签: c++ qt winapi


    【解决方案1】:

    条件 msg->message == WM_QUERYENDSESSION 永远不会为真,因为您使用未初始化的指针 (MSG * msg) 调用函数。

    你需要传递一个有意义的msg

    但是,这不是您想要实现 winEventFilter 的方式。

    winEventFilterQCoreApplication 的一个方法,您应该通过在您的QCoreApplication 子类中重新实现它来使用它。然后它会自动为你调用。

    更多详情请见http://qt-project.org/doc/qt-4.8/qcoreapplication.html#winEventFilter

    【讨论】:

    • 我认为它是一个回调函数,所以它会得到消息。好的,我会努力改正的。
    • @JChan:啊,我明白了,我想你误解了你应该如何实现它。您需要在 QCoreApplication 子类中重新实现它(请参阅我的编辑)。你不想想把它作为一个单独的函数来实现,因为那样它就不会被调用了。
    • Qt 5 已将 winEventFilter 替换为 installNativeEventFilter:doc.qt.io/qt-5/sourcebreaks.html#changes-to-qcoreapplication
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 2020-06-04
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多