QAbstractNativeEventFilter Class
La classe QAbstractNativeEventFilter fournit une interface pour la réception d'événements natifs, tels que les structures d'événements MSG ou XCB. Plus d'informations...
| En-tête : | #include <QAbstractNativeEventFilter> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake : | QT += core |
Fonctions publiques
| QAbstractNativeEventFilter() | |
| virtual | ~QAbstractNativeEventFilter() |
| virtual bool | nativeEventFilter(const QByteArray &eventType, void *message, qintptr *result) = 0 |
Documentation des fonctions membres
QAbstractNativeEventFilter::QAbstractNativeEventFilter()
Crée un filtre d'événement natif.
Par défaut, il ne fait rien. N'oubliez pas de l'installer sur l'objet d'application.
[virtual noexcept] QAbstractNativeEventFilter::~QAbstractNativeEventFilter()
Détruit le filtre d'événements natif.
Cette opération le supprime automatiquement de l'application.
[pure virtual] bool QAbstractNativeEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, qintptr *result)
Cette méthode est appelée pour chaque événement natif.
Remarque : la fonction de filtrage reçoit ici des messages natifs, par exemple des structures d'événements MSG ou XCB.
Elle est appelée par le plugin de la plateforme QPA. Sous Windows, elle est appelée par le distributeur d'événements.
Le type d'événement eventType est spécifique au greffon de plateforme choisi lors de l'exécution et peut être utilisé pour attribuer le bon type à message.
Sous X11, eventType vaut "xcb_generic_event_t", et message peut être casté vers un pointeur xcb_generic_event_t.
Sous Windows, eventType a pour valeur "windows_generic_MSG" pour les messages envoyés aux fenêtres de niveau supérieur, et "windows_dispatcher_MSG" pour les messages à l'échelle du système, tels que les messages provenant d'une touche de raccourci enregistrée. Dans les deux cas, l'adresse message peut être convertie en un pointeur MSG. Le pointeur result n'est utilisé que sous Windows et correspond au pointeur LRESULT.
Sous macOS, eventType est défini sur "mac_generic_NSEvent", et le message peut être casté en un pointeur NSEvent.
Dans votre réimplémentation de cette fonction, si vous voulez filtrer le message, c'est-à-dire arrêter son traitement, renvoyez true ; sinon, renvoyez false.
Exemple 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; } };
Exemple 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; } };
Exemple 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.