QAbstractNativeEventFilter Class
QAbstractNativeEventFilter クラスは、MSG や XCB イベント構造体のようなネイティブ・イベントを受け取るためのインタフェースを提供します。詳細...
Header: | #include <QAbstractNativeEventFilter> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
パブリック関数
QAbstractNativeEventFilter() | |
virtual | ~QAbstractNativeEventFilter() |
virtual bool | nativeEventFilter(const QByteArray &eventType, void *message, qintptr *result) = 0 |
メンバ関数説明
QAbstractNativeEventFilter::QAbstractNativeEventFilter()
ネイティブ・イベント・フィルタを作成します。
デフォルトでは何もしません。アプリケーション・オブジェクトにインストールすることを忘れないでください。
[virtual noexcept]
QAbstractNativeEventFilter::~QAbstractNativeEventFilter()
ネイティブ・イベント・フィルターを破棄します。
これは自動的にアプリケーションから削除されます。
[pure virtual]
bool QAbstractNativeEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, qintptr *result)
このメソッドはネイティブ・イベントごとに呼び出されます。
注: ここでのフィルタ関数は、MSG や XCB イベント構造体などのネイティブ メッセージを受信します。
この関数は QPA プ ラ ッ ト フ ォーム プ ラ グ イ ンか ら 呼び出 さ れます。Windows では、イベント ディスパッチャによって呼び出されます。
イ ベン トeventType の型は、 実行時に選択 さ れ る プ ラ ッ ト フ ォーム プ ラ グ イ ンに固有であ り 、message を適切な型にキ ャ ス ト す る ために使用で き ます。
X11では、eventType は "xcb_generic_event_t "に設定され、message は xcb_generic_event_tポインタにキャストされる。
Windowsでは、eventType は、トップレベル・ウィンドウに送られるメッセージには "windows_generic_MSG "に設定され、登録されたホットキーからのメッセージのようなシステム全体のメッセージには "windows_dispatcher_MSG "に設定される。どちらの場合も、message を MSG ポインタにキャストすることができます。result ポインタは Windows でのみ使用され、LRESULT ポインタに対応する。
macOSでは、eventType は "mac_generic_NSEvent "に設定され、message はNSEventポインタにキャストできます。
この関数を再実装する際、message をフィルタリングしたい場合、つまりそれ以上処理したくない場合は true を返し、そうでない場合は false を返してください。
Linuxの例
class MyXcbEventFilter : public QAbstractNativeEventFilter { public: bool nativeEventFilter(const QByteArray &eventType, void *message, qintptr *) override { if (eventType == "xcb_generic_event_t") { xcb_generic_event_t* ev = static_cast<xcb_generic_event_t *>(message); // ... } return false; } };
Windowsの例
class MyMSGEventFilter : public QAbstractNativeEventFilter { public: bool nativeEventFilter(const QByteArray &eventType, void *message, qintptr *) override { if (eventType == "windows_generic_MSG") { MSG *msg = static_cast<MSG *>(message); // ... } else if (eventType == "windows_dispatcher_MSG") { MSG *msg = static_cast<MSG *>(message); // ... } return false; } };
macOSの例
mycocoaeventfilter.h:
#include <QAbstractNativeEventFilter> class MyCocoaEventFilter : public QAbstractNativeEventFilter { public: bool nativeEventFilter(const QByteArray &eventType, void *message, qintptr *) override; };
mycocoaeventfilter.mm:
#include "mycocoaeventfilter.h" #import <AppKit/AppKit.h> bool MyCocoaEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, qintptr *) { if (eventType == "mac_generic_NSEvent") { NSEvent *event = static_cast<NSEvent *>(message); if ([event type] == NSKeyDown) { // Handle key event qDebug() << QString::fromNSString([event characters]); } } return false; }
myapp.pro:
HEADERS += mycocoaeventfilter.h OBJECTIVE_SOURCES += mycocoaeventfilter.mm LIBS += -framework AppKit
©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。