2017-09-01 28 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. 做任何你需要做的事