使用Qt接口获取Windows系统的事件

介绍Qt4和Qt5获取Windows系统事件的方法。

Qt4版本的实现

方法1:

  • 通过继承QWidget的类中重新实现winEvent接口,以接收在消息参数中传递的本机Windows事件。
    1
    bool QWidget::winEvent(MSG *message, long *result)

方法2:

  • 通过继承QCoreApplication的类中重新实现winEventFilter接口,以接收在消息参数中传递的本机Windows事件。
    1
    bool QCoreApplication::winEventFilter(MSG *msg, long *result)

Qt5版本实现

方法1:

  • 通过继承QWidget的类中重新实现winEvent接口,以接收在消息参数中传递的eventType标识的本机平台事件。
    1
    bool QWidget::nativeEvent(const QByteArray &eventType, void *message, long *result)

方法2:

  • 通过继承QAbstractNativeEventFilter的类中重新实现nativeEventFilter接口:
    1
    bool QAbstractNativeEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, long *result)

安装到中:

1
void QCoreApplication::installNativeEventFilter(QAbstractNativeEventFilter *filterObj)

或安装到:

1
void QAbstractEventDispatcher::installNativeEventFilter(QAbstractNativeEventFilter *filterObj)

  • 特别地:不同平台对应的eventType类型有:
平台 事件类型(eventType) 消息类型(message) 结果类型(result)
Windows “windows_generic_MSG” MSG * LRESULT
macOs “NSEvent” NSEvent *
XCB(Linux) “xcb_generic_event_t” xcb_generic_event_t *