QAbstractEventDispatcher Class

QAbstractEventDispatcher 类提供了管理 Qt 事件队列的接口。更多

Header: #include <QAbstractEventDispatcher>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
继承: QObject
继承于:

QAbstractEventDispatcherV2

公共类型

公共函数

QAbstractEventDispatcher(QObject *parent = nullptr)
virtual ~QAbstractEventDispatcher()
bool filterNativeEvent(const QByteArray &eventType, void *message, qintptr *result)
void installNativeEventFilter(QAbstractNativeEventFilter *filterObj)
virtual void interrupt() = 0
virtual bool processEvents(QEventLoop::ProcessEventsFlags flags) = 0
virtual void registerSocketNotifier(QSocketNotifier *notifier) = 0
(since 6.8) void registerTimer(Qt::TimerId timerId, QAbstractEventDispatcher::Duration interval, Qt::TimerType timerType, QObject *object)
virtual void registerTimer(int timerId, qint64 interval, Qt::TimerType timerType, QObject *object) = 0
(since 6.8) Qt::TimerId registerTimer(QAbstractEventDispatcher::Duration interval, Qt::TimerType timerType, QObject *object)
virtual QList<QAbstractEventDispatcher::TimerInfo> registeredTimers(QObject *object) const = 0
virtual int remainingTime(int timerId) = 0
QAbstractEventDispatcher::Duration remainingTime(Qt::TimerId timerId) const
void removeNativeEventFilter(QAbstractNativeEventFilter *filter)
(since 6.8) QList<QAbstractEventDispatcher::TimerInfoV2> timersForObject(QObject *object) const
virtual void unregisterSocketNotifier(QSocketNotifier *notifier) = 0
(since 6.8) bool unregisterTimer(Qt::TimerId timerId)
virtual bool unregisterTimer(int timerId) = 0
virtual bool unregisterTimers(QObject *object) = 0
virtual void wakeUp() = 0

信号

void aboutToBlock()
void awake()

静态公共成员

QAbstractEventDispatcher *instance(QThread *thread = nullptr)

详细说明

事件派发器从窗口系统和其他来源接收事件。然后,它将这些事件发送到QCoreApplicationQApplication 实例进行处理和交付。QAbstractEventDispatcher 提供了对事件发送的细粒度控制。

要对事件处理进行简单控制,请使用QCoreApplication::processEvents() 。

要对应用程序的事件循环进行更精细的控制,请调用instance() 并在返回的 QAbstractEventDispatcher 对象上调用函数。如果要使用自己的 QAbstractEventDispatcher 或 QAbstractEventDispatcher 子类实例,必须安装默认事件派发器之前,使用QCoreApplication::setEventDispatcher() 或QThread::setEventDispatcher() 安装。

主事件循环通过调用QCoreApplication::exec() 启动,并通过调用QCoreApplication::exit() 停止。本地事件循环可通过QEventLoop 创建。

执行长操作的程序可以调用processEvents() 并使用各种QEventLoop::ProcessEventsFlag 值的位顺时针 OR 组合来控制哪些事件应被传送。

QAbstractEventDispatcher 还允许将外部事件循环与 Qt 事件循环集成。

另请参见 QEventLoop,QCoreApplication, 和QThread

成员类型文档

[alias] QAbstractEventDispatcher::Duration

std::chrono::duration 类型,用于本类中的各种 API。该类型的存在是为了方便过渡到更高或更低的粒度。

在当前的所有平台中,它都是nanoseconds

成员函数文档

[explicit] QAbstractEventDispatcher::QAbstractEventDispatcher(QObject *parent = nullptr)

用给定的parent 构建一个新的事件派发器。

[virtual noexcept] QAbstractEventDispatcher::~QAbstractEventDispatcher()

销毁事件派发器。

[signal] void QAbstractEventDispatcher::aboutToBlock()

该信号在事件循环调用可能阻塞的函数之前发出。

另请参见 awake().

[signal] void QAbstractEventDispatcher::awake()

该信号在事件循环从可能阻塞的函数返回后发出。

另请参阅 wakeUp() 和aboutToBlock()。

bool QAbstractEventDispatcher::filterNativeEvent(const QByteArray &eventType, void *message, qintptr *result)

通过installNativeEventFilter() 设置的事件过滤器发送message 。只要事件过滤器返回true ,该函数就会返回true ,否则就会返回 false,表示应继续处理该事件。

QAbstractEventDispatcher 的子类必须为从系统接收到的所有消息调用该函数,以确保与应用程序中可能使用的任何扩展兼容。eventType 的事件类型与运行时选择的平台插件有关,可用于将消息转换为正确的类型。result 指针仅用于 Windows,与 LRESULT 指针相对应。

请注意,message 的类型与平台有关。详见QAbstractNativeEventFilter

另请参阅 installNativeEventFilter() 和QAbstractNativeEventFilter::nativeEventFilter()。

void QAbstractEventDispatcher::installNativeEventFilter(QAbstractNativeEventFilter *filterObj)

为应用程序接收到的所有本地事件安装事件过滤器filterObj

事件过滤器filterObj 通过其nativeEventFilter() 函数接收事件,所有线程接收到的所有事件都会调用该函数。

如果事件应被过滤(本例中为停止),则nativeEventFilter() 函数应返回 true。如果返回 false,则允许继续进行正常的 Qt 处理:然后将本地事件翻译为QEvent ,并通过标准 Qtevent 过滤(如QObject::installEventFilter() )进行处理。

如果安装了多个事件过滤器,则先激活最后安装的过滤器。

注意: 此处设置的过滤函数接收本地消息,即 MSG 或 XEvent 结构。

为获得最大的可移植性,应尽可能使用QEvent 对象和QObject::installEventFilter() 。

另请参见 QObject::installEventFilter()。

[static] QAbstractEventDispatcher *QAbstractEventDispatcher::instance(QThread *thread = nullptr)

返回指向指定thread 的事件派发器对象的指针。如果threadnullptr ,则使用当前线程。如果指定的线程不存在事件派发器,则此函数返回nullptr

注意:如果 Qt XML 在构建时不支持线程,则thread 参数将被忽略。

[pure virtual] void QAbstractEventDispatcher::interrupt()

中断事件派发。事件派发器将尽快从processEvents() 返回。

[pure virtual] bool QAbstractEventDispatcher::processEvents(QEventLoop::ProcessEventsFlags flags)

处理与flags 匹配的待处理事件,直到没有更多事件需要处理。如果事件已处理,则返回true ;否则返回false

如果您有一个长期运行的操作,并希望在不允许用户输入的情况下使用QEventLoop::ExcludeUserInputEvents 标志显示其进度,则此函数尤其有用。

如果在flags 中设置了QEventLoop::WaitForMoreEvents 标志,则此函数的行为如下:

  • 如果有事件,该函数会在处理完事件后返回。
  • 如果没有可用事件,该函数将等待更多可用事件,并在处理完新的可用事件后返回。

如果flags 中未设置QEventLoop::WaitForMoreEvents 标志,且没有可用事件,则此函数将立即返回。

注意:此函数不会连续处理事件,而是在处理完所有可用事件后返回。

[pure virtual] void QAbstractEventDispatcher::registerSocketNotifier(QSocketNotifier *notifier)

notifier 注册到事件循环中。子类必须实现该方法,才能将套接字通知程序与另一个事件循环绑定。

[since 6.8] void QAbstractEventDispatcher::registerTimer(Qt::TimerId timerId, QAbstractEventDispatcher::Duration interval, Qt::TimerType timerType, QObject *object)

使用指定的timerIdintervaltimerType 为给定的object 注册计时器。

此函数在 Qt 6.8 中引入。

另请参阅 unregisterTimer() 和timersForObject()。

[pure virtual] void QAbstractEventDispatcher::registerTimer(int timerId, qint64 interval, Qt::TimerType timerType, QObject *object)

用指定的timerIdintervaltimerType 注册一个计时器,用于给定的object

[since 6.8] Qt::TimerId QAbstractEventDispatcher::registerTimer(QAbstractEventDispatcher::Duration interval, Qt::TimerType timerType, QObject *object)

这是一个重载函数。

使用指定的intervaltimerType 为给定的object 注册定时器,并返回定时器 id。

此函数在 Qt 6.8 中引入。

[pure virtual] QList<QAbstractEventDispatcher::TimerInfo> QAbstractEventDispatcher::registeredTimers(QObject *object) const

返回object 的已注册计时器列表。TimerInfo 结构有timerIdintervaltimerType 成员。

另请参见 Qt::TimerType

[pure virtual] int QAbstractEventDispatcher::remainingTime(int timerId)

以毫秒为单位返回给定timerId 的剩余时间。如果定时器处于非活动状态,则返回值为-1;如果定时器超时,则返回值为 0。

另请参阅 Qt::TimerType

QAbstractEventDispatcher::Duration QAbstractEventDispatcher::remainingTime(Qt::TimerId timerId) const

返回给定timerId 定时器的剩余时间。如果计时器处于非活动状态,返回值将为负数。如果计时器超时,则返回值为 0。

另请参阅 Qt::TimerType,registerTimer() 和unregisterTimer()。

void QAbstractEventDispatcher::removeNativeEventFilter(QAbstractNativeEventFilter *filter)

从该对象中删除事件过滤器filter 。如果未安装此类事件过滤器,则该请求将被忽略。

销毁该对象时,将自动删除该对象的所有事件过滤器。

删除事件过滤器始终是安全的,即使是在事件过滤器激活过程中(即即使是在nativeEventFilter() 函数中)。

另请参阅 installNativeEventFilter() 和QAbstractNativeEventFilter

[since 6.8] QList<QAbstractEventDispatcher::TimerInfoV2> QAbstractEventDispatcher::timersForObject(QObject *object) const

返回object 的已注册计时器列表。TimerInfoV2 结构包含timerIdintervaltimerType 成员。

此函数在 Qt 6.8 中引入。

另请参阅 Qt::TimerTyperegisterTimer() 和unregisterTimer()。

[pure virtual] void QAbstractEventDispatcher::unregisterSocketNotifier(QSocketNotifier *notifier)

从事件派发器中注销notifier 。子类必须重新实现此方法,才能将套接字通知程序与另一个事件循环绑定。重新实现必须调用基本实现。

[since 6.8] bool QAbstractEventDispatcher::unregisterTimer(Qt::TimerId timerId)

使用给定的timerId 取消注册定时器。如果成功,则返回true ;否则返回false

此函数在 Qt 6.8 中引入。

另请参阅 registerTimer() 和unregisterTimers()。

[pure virtual] bool QAbstractEventDispatcher::unregisterTimer(int timerId)

使用给定的timerId 取消注册定时器。如果成功,则返回true ;否则返回false

另请参阅 registerTimer() 和unregisterTimers() 。

[pure virtual] bool QAbstractEventDispatcher::unregisterTimers(QObject *object)

取消注册与给定object 相关的所有计时器。如果所有计时器都被成功移除,则返回true ;否则返回false

另请参阅 unregisterTimer() 和registeredTimers()。

[pure virtual] void QAbstractEventDispatcher::wakeUp()

唤醒事件循环。

注意:该函数是线程安全的

另请参阅 awake().

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.