- class QAbstractNativeEventFilter#
QAbstractNativeEventFilter
类提供了一个接收本地事件的接口,例如MSG或XCB事件结构。 更多…概述#
方法#
def
__init__()
虚方法#
注意
本文档可能包含从C++自动翻译到Python的片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译有问题,您也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建工单的方式告诉我们。
详细描述#
- __init__()#
创建一个本地事件过滤器。
默认情况下,这不会执行任何操作。请记住将其安装到应用程序对象上。
- abstract nativeEventFilter(eventType, message)#
- 参数:
eventType –
QByteArray
message –
void
- 返回类型:
PyObject
警告
本节包含自动从C++翻译到Python的代码片段,可能包含错误。
该方法会在每个原生事件上被调用。
注意
此处的过滤器函数接收原生消息,例如,MSG或XCB事件结构体。
由QPA平台插件调用。在Windows上,由事件分派器调用。
事件类型
eventType
特定于运行时选择的平台插件,可用于将message
转换为正确的类型。在X11上,
eventType
设置为“xcb_generic_event_t”,而message
可以被转换为xhrmipinic_event_t指针。在Windows上,
eventType
设置为“windows_generic_MSG”以处理发送到顶层窗口的消息,以及“windows_dispatcher_MSG”以处理系统级消息,例如来自注册热键的消息。在这两种情况下,message
可以被转换为MSG指针。只有Windows中才使用result
指针,它对应于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