Auf dieser Seite

QAbstractNativeEventFilter Class

Die Klasse „QAbstractNativeEventFilter“ bietet eine Schnittstelle zum Empfang nativer Ereignisse, wie beispielsweise MSG- oder XCB-Ereignisstrukturen. Mehr...

Header: #include <QAbstractNativeEventFilter>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

Öffentliche Funktionen

QAbstractNativeEventFilter()
virtual ~QAbstractNativeEventFilter()
virtual bool nativeEventFilter(const QByteArray &eventType, void *message, qintptr *result) = 0

Ausführliche Beschreibung

Dokumentation zu den Mitgliedsfunktionen

QAbstractNativeEventFilter::QAbstractNativeEventFilter()

Erstellt einen nativen Ereignisfilter.

Standardmäßig hat dies keine Auswirkung. Denken Sie daran, ihn am Anwendungsobjekt anzubringen.

[virtual noexcept] QAbstractNativeEventFilter::~QAbstractNativeEventFilter()

Löscht den nativen Ereignisfilter.

Dadurch wird er automatisch aus der Anwendung entfernt.

[pure virtual] bool QAbstractNativeEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, qintptr *result)

Diese Methode wird bei jedem nativen Ereignis aufgerufen.

Hinweis: Die Filterfunktion empfängt hier native Nachrichten, zum Beispiel MSG- oder XCB-Ereignisstrukturen.

Sie wird vom QPA-Plattform-Plugin aufgerufen. Unter Windows wird sie vom Ereignis-Dispatcher aufgerufen.

Der Typ des Ereignis eventType s ist spezifisch für das zur Laufzeit gewählte Plattform-Plugin und kann verwendet werden, um ` message ` in den richtigen Typ umzuwandeln.

Unter X11 wird eventType auf „xcb_generic_event_t“ gesetzt, und message kann in einen Zeiger vom Typ xcb_generic_event_t umgewandelt werden.

Unter Windows wird „ eventType “ für Nachrichten, die an Fenster der obersten Ebene gesendet werden, auf „windows_generic_MSG“ gesetzt, und für systemweite Nachrichten, wie z. B. Nachrichten von einem registrierten Hotkey, auf „windows_dispatcher_MSG“. In beiden Fällen kann „ message “ in einen MSG-Zeiger umgewandelt werden. Der Zeiger „ result “ wird nur unter Windows verwendet und entspricht dem LRESULT-Zeiger.

Unter macOS wird „ eventType “ auf „mac_generic_NSEvent“ gesetzt, und der „ message “ kann in einen NSEvent-Zeiger umgewandelt werden.

Wenn Sie in Ihrer Neuimplementierung dieser Funktion das „ message “ herausfiltern möchten, d. h. verhindern wollen, dass es weiterverarbeitet wird, geben Sie „true“ zurück; andernfalls geben Sie „false“ zurück.

Beispiel für 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-Beispiel

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;
    }
};

Beispiel für 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

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.