2017-09-01 3 views
0

私は、公式ウェブサイト上で提供の説明によると、私のQtアプリケーションにウィンドウメッセージを傍受するnativeEventFilterを実装しようとしています:Qt:イベントタイプはどこで定義されていますか?

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

しかし、彼らはどこ/どのようにeventTypeがすべき言及していません提供されたサンプルにはヒントが示されていません。したがって、私のプログラムではwindows_dispatcher_MSGは明らかに未定義です。小さな例に続き

+0

静的const QByteArray windowsDispatcherMSG( "windows_dispatcher_MSG");を作成し、 'eventType == windowsDispatcherMSG'を取得したものと比較してください。さらに、 '' QByteArray'は '' windows_dispatcher_MSG "'から暗黙的にキャストできるので、 '' eventType == "windows_dispatcher_MSG" 'を直接比較することができます。ここで' eventType'は 'nativeEventFilter'関数の最初のパラメータです – Robert

+0

I ' windowDispatcherMSGは型ではないので、static_castと混乱します(したがって、Qtサンプルのようにvoid *からwindowsDispatcherMSG *にキャストできません)。私が紛失しているものがあります。 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. チェックメッセージの種類にボイドポインタをキャスト処理したい1とのeventTypeを比較
  4. あなたがそれと関係があるものは何でもしてください
関連する問題