En esta página

QAbstractNativeEventFilter Class

La clase QAbstractNativeEventFilter proporciona una interfaz para la recepción de eventos nativos, tales como MSG o XCB. Más...

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

Funciones públicas

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

Descripción detallada

Documentación de las funciones de los miembros

QAbstractNativeEventFilter::QAbstractNativeEventFilter()

Crea un filtro de eventos nativo.

Por defecto no hace nada. Recuerda instalarlo en el objeto de la aplicación.

[virtual noexcept] QAbstractNativeEventFilter::~QAbstractNativeEventFilter()

Destruye el filtro de eventos nativo.

Esto lo elimina automáticamente de la aplicación.

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

Este método es llamado para cada evento nativo.

Nota: La función de filtro aquí recibe mensajes nativos, por ejemplo, MSG o estructuras de eventos XCB.

Es llamada por el plugin de plataforma QPA. En Windows, es llamada por el despachador de eventos.

El tipo de evento eventType es específico del plugin de plataforma elegido en tiempo de ejecución, y puede ser utilizado para asignar message al tipo correcto.

En X11, eventType está configurado como "xcb_generic_event_t", y message puede ser convertido a un puntero xcb_generic_event_t. En Windows, está configurado como "xcb_generic_event_t", y puede ser convertido a un puntero xcb_generic_event_t.

En Windows, eventType se define como "windows_generic_MSG" para los mensajes enviados a ventanas de nivel superior, y como "windows_dispatcher_MSG" para los mensajes de todo el sistema, como los mensajes de una tecla de acceso rápido registrada. En ambos casos, message puede convertirse en un puntero MSG. El puntero result sólo se utiliza en Windows, y corresponde al puntero LRESULT.

En macOS, eventType se establece como "mac_generic_NSEvent", y message puede convertirse en un puntero NSEvent.

En su reimplementación de esta función, si desea filtrar el message, es decir, evitar que se siga manejando, devuelva true; en caso contrario, devuelva false.

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

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

ejemplo 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.