QAbstractNativeEventFilter 类
QAbstractNativeEventFilter 类提供了一个接收原生事件,例如 MSG 或 XCB 事件结构的接口。 更多...
头文件 | #include <QAbstractNativeEventFilter> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
公共函数
QAbstractNativeEventFilter() | |
virtual | ~QAbstractNativeEventFilter() |
virtual bool | nativeEventFilter(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公司在芬兰和/或其他国家/地区的商标。商标。所有其他商标均归各自所有者所有。