QAbstractNativeEventFilter Class
La classe `QAbstractNativeEventFilter` fournit une interface permettant de recevoir des événements natifs, tels que les structures d'événements MSG ou XCB. En savoir plus...
| 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 sur les fonctions membres
QAbstractNativeEventFilter::QAbstractNativeEventFilter()
Crée un filtre d'événements natif.
Par défaut, cela ne fait rien. N'oubliez pas de l'installer sur l'objet application.
[virtual noexcept] QAbstractNativeEventFilter::~QAbstractNativeEventFilter()
Supprime le filtre d'événements natif.
Cela le supprime automatiquement de l'application.
[pure virtual] bool QAbstractNativeEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, qintptr *result)
Cette méthode est appelée à chaque événement natif.
Remarque : la fonction de filtrage reçoit ici des messages natifs, par exemple des structures d'événement MSG ou XCB.
Elle est appelée par le plugin de la plateforme QPA. Sous Windows, elle est appelée par le répartiteur d'événements.
Le type d'événement eventType est spécifique au plugin de plateforme choisi lors de l'exécution et peut être utilisé pour convertir message en type approprié.
Sous X11, ` eventType ` est défini sur « xcb_generic_event_t », et ` message ` peut être converti en pointeur `xcb_generic_event_t`.
Sous Windows, eventType est défini sur « windows_generic_MSG » pour les messages envoyés aux fenêtres de niveau supérieur, et sur « windows_dispatcher_MSG » pour les messages à l'échelle du système, tels que ceux provenant d'un raccourci clavier enregistré. Dans les deux cas, l'message peut être converti en 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 l’ message peut être converti en pointeur NSEvent.
Dans votre réimplémentation de cette fonction, si vous souhaitez filtrer l’ message, c’est-à-dire empêcher qu’il ne soit traité plus loin, renvoyez true ; sinon, renvoyez false.
Exemple sous 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 sous 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.