2017-09-01 29 views
0

我试图实现一个nativeEventFilter根据所提供的官方网站上的说明,我的Qt应用程序来拦截窗口消息:Qt:定义的事件类型在哪里?

https://doc.qt.io/qt-5/qabstractnativeeventfilter.html#details

然而,他们不提哪里/在eventType应该如何被定义,所提供的样本也不会显示任何提示。因此,我的程序显然未定义windows_dispatcher_MSG

+0

创建一个字节数组''static const QByteArray windowsDispatcherMSG(“windows_dispatcher_MSG”);'并将其与您获得的'eventType == windowsDispatcherMSG'进行比较。此外,由于'QByteArray'可以隐式地从''windows_dispatcher_MSG''中输出,所以你应该能够直接比较'eventType =='windows_dispatcher_MSG'',其中'eventType'是'nativeEventFilter'函数的第一个参数 – Robert

+0

I' m与static_cast混淆,因为windowsDispatcherMSG不是一个类型(因此我无法从void *转换到windowsDispatcherMSG *,就像在Qt示例中那样)。有遗漏的东西,我失踪了。你能否提供一个示例片段,截取一个WM_DEVICECHANGE消息。提前致谢。 – user2556487894

回答

1

下面一个小例子:

bool Foo::nativeEventFilter(const QByteArray & eventType, void * message, long * result) 
{ 
    static const QByteArray windowsDispatcherMSG("windows_dispatcher_MSG"); 
    if (eventType != windowsDispatcherMSG) 
     return false; 

    const MSG * m = static_cast<MSG*>(message); 
    if (m->message != WM_DEVICECHANGE) 
     return false; 

    /** ...do something... **/ 
} 
  1. 比较要处理
  2. 投的空隙指针MSG
  3. 检查消息的类型之一EVENTTYPE
  4. 做任何你需要做的事