class QAbstractNativeEventFilter#

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

概述#

方法#

虚方法#

注意

本文档可能包含从C++自动翻译到Python的片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译有问题,您也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建工单的方式告诉我们。

详细描述#

__init__()#

创建一个本地事件过滤器。

默认情况下,这不会执行任何操作。请记住将其安装到应用程序对象上。

abstract nativeEventFilter(eventType, message)#
参数:
返回类型:

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