如何使用QCoreApplication :: winEventFilter处理Windows消息

时间:2012-06-25 23:00:56

标签: c++ qt winapi

我正在尝试使用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);

当我注销或关闭计算机时,它永远不会打印日志关闭

1 个答案:

答案 0 :(得分:3)

条件msg->message == WM_QUERYENDSESSION将永远不会成立,因为您使用单位指针(MSG * msg)调用该函数。

您需要传递有意义的msg

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

winEventFilterQCoreApplication的一种方法,您应该在QCoreApplication子类中重新实现它。然后它将自动为您调用。

有关详细信息,请参阅http://qt-project.org/doc/qt-4.8/qcoreapplication.html#winEventFilter