Sur cette page

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

Description détaillée

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.