QAbstractNativeEventFilter 类

QAbstractNativeEventFilter 类提供了一个接收原生事件,例如 MSG 或 XCB 事件结构的接口。 更多...

头文件 #include <QAbstractNativeEventFilter>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

公共函数

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

详细描述

成员函数文档

QAbstractNativeEventFilter::QAbstractNativeEventFilter()

创建一个原生事件过滤器。

默认情况下,此函数不执行任何操作。请记住将其安装在本应用对象上。

[virtual noexcept] QAbstractNativeEventFilter::~QAbstractNativeEventFilter()

销毁原生事件过滤器。

这会自动将其从应用程序中删除。

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

每次原生事件都会调用此方法。

注意:此处过滤器函数接收原生消息,例如 MSG 或 XCB 事件结构。

由 QPA 平台插件调用。在 Windows 上,由事件分发器调用。

事件类型 eventType 对运行时选择的平台插件是特定的,并且可以用于将 message 强制转换为正确的类型。

在 X11 上,eventType 被设置为 "xcb_generic_event_t",而 message 可以强制转换为 xcb_generic_event_t 指针。

在 Windows 上,eventType 被设置为 "windows_generic_MSG" 用于发送到顶层窗口的消息,以及如注册热键消息等系统范围内的消息。在这两种情况下,message 可以强制转换为 MSG 指针。仅在使用 Windows 时,result 指针才有用,它对应于 LRESULT 指针。

在 macOS 上,eventType 被设置为 "mac_json_NSEvent",而 message 可以强制转换为 NSEvent 指针。

在你的函数重实现中,如果你想过滤掉 message,即停止进一步处理,则返回 true;否则返回 false。

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

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

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

© 2024 Qt公司有限公司。此处包含的文档贡献归各自所有者所有版权。提供的文档根据自由软件基金会的授予,根据GNU自由文档许可协议第1.3版的条款进行许可。Qt及其相关标志是Qt公司在芬兰和/或其他国家/地区的商标。商标。所有其他商标均归各自所有者所有。