nativeEventFilter ってどうやってハンドルするの?
Windowsで、ウィンドウメッセージ (WM_KEYDOWN とか) みたいなネイティブメッセージをハンドルしたい時、どうするのか調べてみました。nativeEventFilter( ... ) を TMainWindow や QApplication でオーバーライドしてもメッセージが飛んでこなかったので挫折しそうになりましたが、こちらを参考にしたら上手く行きました。
http://www.qtcentre.org/threads/56438-help-with-QAbstractNativeEventFilter
よく理解してなくて申し訳ないですが、念のためコードをメモっときます。
mainwindow.h
#include <QAbstractNativeEventFilter> class usbworker : public QAbstractNativeEventFilter { public: usbworker(); virtual bool nativeEventFilter( const QByteArray &eventType, void *message, long *result ); }; MainWindow に usbworker usb; プロパティを追加
mainwindow.cpp
usbworker::usbworker() { } bool usbworker::nativeEventFilter( const QByteArray &eventType, void *message, long *result ) Q_DECL_OVERRIDE { qDebug("i came here"); if (eventType == "windows_generic_MSG") { MSG *msg = static_cast<MSG *>(message); if (msg->message == WM_KEYDOWN) { // キーボード押したら飛んでくる return false; } } return false; }