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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。