PySide6.QtCore.QAbstractNativeEventFilter

class QAbstractNativeEventFilter

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

概要

方法

虚拟方法

注意

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

详细描述

__init__()

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

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

abstract nativeEventFilter(eventType, message)
Parameters:
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