PySide6.QtCore.QAbstractNativeEventFilter¶
- class QAbstractNativeEventFilter¶
QAbstractNativeEventFilter
类提供了一个接口,用于接收原生事件,例如 MSG 或 XCB 事件结构。更多…概要¶
方法¶
def
__init__()
虚拟方法¶
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
- __init__()¶
创建一个本地事件过滤器。
默认情况下,这不会执行任何操作。请记得将其安装在应用程序对象上。
- abstract nativeEventFilter(eventType, message)¶
- Parameters:
eventType –
QByteArray
message –
void
- Return type:
PyObject
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
此方法为每个原生事件调用。
注意
这里的过滤函数接收原生消息,例如,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(QAbstractNativeEventFilter): # public bool nativeEventFilter(QByteArray eventType, void message, qintptr ) override if eventType == "xcb_generic_event_t": xcb_generic_event_t* ev = xcb_generic_event_t(message) # ... return False
Windows 示例
class MyMSGEventFilter(QAbstractNativeEventFilter): # public bool nativeEventFilter(QByteArray eventType, void message, qintptr ) override if eventType == "windows_generic_MSG": msg = MSG(message) # ... elif eventType == "windows_dispatcher_MSG": msg = MSG(message) # ... return False
macOS 示例
mycocoaeventfilter.h:
from PySide6.QtCore import QAbstractNativeEventFilter class MyCocoaEventFilter(QAbstractNativeEventFilter): # public bool nativeEventFilter(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