QAbstractNativeEventFilter Class
Die Klasse QAbstractNativeEventFilter bietet eine Schnittstelle für den Empfang von nativen Ereignissen, wie z.B. MSG oder XCB Event Structs. Mehr...
Kopfzeile: | #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 |
Dokumentation der Mitgliedsfunktionen
QAbstractNativeEventFilter::QAbstractNativeEventFilter()
Erzeugt einen nativen Ereignisfilter.
Standardmäßig tut dieser nichts. Denken Sie daran, ihn auf dem Anwendungsobjekt zu installieren.
[virtual noexcept]
QAbstractNativeEventFilter::~QAbstractNativeEventFilter()
Zerstört 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 für jedes native Ereignis aufgerufen.
Hinweis: Die Filterfunktion empfängt hier native Nachrichten, z. B. MSG- oder XCB-Ereignis-Strukturen.
Sie wird vom QPA-Plattform-Plugin aufgerufen. Unter Windows wird sie vom Event Dispatcher aufgerufen.
Der Typ des Ereignisses eventType ist spezifisch für das zur Laufzeit gewählte Plattform-Plugin und kann verwendet werden, um message auf den richtigen Typ zu setzen.
Unter X11 ist eventType auf "xcb_generic_event_t" gesetzt, und message kann in einen xcb_generic_event_t-Zeiger gecastet werden.
Unter Windows ist eventType auf "windows_generic_MSG" für Nachrichten, die an Toplevel-Fenster gesendet werden, und auf "windows_dispatcher_MSG" für systemweite Nachrichten, wie z.B. Nachrichten von einer registrierten Tastenkombination, gesetzt. In beiden Fällen kann der message in einen MSG-Zeiger umgewandelt werden. Der Zeiger result wird nur unter Windows verwendet und entspricht dem LRESULT-Zeiger.
Unter macOS ist eventType auf "mac_generic_NSEvent" gesetzt, und message kann in einen NSEvent-Zeiger umgewandelt werden.
Wenn Sie in Ihrer Neuimplementierung dieser Funktion message herausfiltern wollen, d. h. die weitere Verarbeitung verhindern wollen, geben Sie true zurück; andernfalls geben Sie false zurück.
Linux-Beispiel
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; } };
macOS-Beispiel
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
© 2025 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.