Класс QAbstractNativeEventFilter
Класс QAbstractNativeEventFilter предоставляет интерфейс для получения нативных событий, таких как структуры событий MSG или XCB. Подробнее...
| Заголовок: | #include <QAbstractNativeEventFilter> |
| qmake: | QT += core |
| С момента: | Qt 5.0 |
Открытые функции
| QAbstractNativeEventFilter() | |
| виртуальный | ~QAbstractNativeEventFilter() |
| виртуальный bool | nativeEventFilter(const QByteArray &eventType, void *message, long *result) = 0 |
Подробное описание
Класс QAbstractNativeEventFilter предоставляет интерфейс для получения нативных событий, таких как структуры событий MSG или XCB.
Документация по функциям-членам
QAbstractNativeEventFilter::QAbstractNativeEventFilter()
Создает фильтр нативных событий.
По умолчанию ничего не делает. Не забудьте установить его на объект приложения.
[virtual] QAbstractNativeEventFilter::~QAbstractNativeEventFilter()
Удаляет фильтр нативных событий.
Это автоматически удаляет его из приложения.
[pure virtual] bool QAbstractNativeEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *result)
Этот метод вызывается для каждого нативного события.
Примечание: Функция-фильтр здесь получает нативные сообщения, например, структуры событий MSG или XCB.
Она вызывается плагином платформы QPA. В Windows она вызывается диспетчером событий.
Тип события eventType специфичен для выбранного плагина платформы во время выполнения и может использоваться для приведения message к нужному типу.
В X11 eventType устанавливается в «xcb_generic_event_t», а message можно привести к указателю xcb_generic_event_t.
В Windows eventType устанавливается в «windows_generic_MSG» для сообщений, отправленных окнам верхнего уровня, и «windows_dispatcher_MSG» для системных сообщений, таких как сообщения от зарегистрированного горячего ключа. В обоих случаях message можно привести к указателю MSG. Указатель result используется только в Windows и соответствует указателю LRESULT.
В macOS eventType устанавливается в «mac_generic_NSEvent», а message можно привести к указателю NSEvent.
В вашей переопределённой функции, если вы хотите отфильтровать message, то есть остановить его дальнейшую обработку, верните true; в противном случае верните false.
Пример для Linux
class MyXcbEventFilter : public QAbstractNativeEventFilter
{
public:
bool nativeEventFilter(const QByteArray &eventType, void *message, long *) override
{
if (eventType == "xcb_generic_event_t") {
xcb_generic_event_t* ev = static_cast<xcb_generic_event_t *>(message);
// ...
}
return false;
}
}; Пример для macOS
mycocoaeventfilter.h:
#include <QAbstractNativeEventFilter>
class MyCocoaEventFilter : public QAbstractNativeEventFilter
{
public:
bool nativeEventFilter(const QByteArray &eventType, void *message, long *) override;
}; mycocoaeventfilter.mm:
#include "mycocoaeventfilter.h"
#import <AppKit/AppKit.h>
bool CocoaNativeEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *)
{
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
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qabstractnativeeventfilter.html