QAbstractEventDispatcher 类

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

头文件 #include <QAbstractEventDispatcher>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core
继承 QObject

公共类型

structTimerInfo

公共函数

QAbstractEventDispatcher(QObject *parent = nullptr)
虚拟~QAbstractEventDispatcher()
boolfilterNativeEvent(const QByteArray &eventType, void *message, qintptr *result)
voidinstallNativeEventFilter(QAbstractNativeEventFilter *filterObj)
虚拟 voidinterrupt() = 0
虚拟 boolprocessEvents(QEventLoop::ProcessEventsFlags flags) = 0
虚拟 voidregisterSocketNotifier(QSocketNotifier *notifier) = 0
intregisterTimer(qint64 interval, Qt::TimerType timerType, QObject *object)
虚拟 voidregisterTimer(int timerId, qint64 interval, Qt::TimerType timerType, QObject *object) = 0
虚拟 QList<QAbstractEventDispatcher::TimerInfo>registeredTimers(QObject *object) const = 0
虚拟 intremainingTime(int timerId) = 0
voidremoveNativeEventFilter(QAbstractNativeEventFilter *filter)
虚拟 voidunregisterSocketNotifier(QSocketNotifier *notifier) = 0
虚拟 boolunregisterTimer(int timerId) = 0
虚拟 boolunregisterTimers(QObject *object) = 0
虚拟 voidwakeUp() = 0

信号

voidaboutToBlock()
voidawake()

静态公共成员

QAbstractEventDispatcher *instance(QThread *thread = nullptr)

详细描述

事件分发器从窗口系统和其它来源接收事件。然后将它们发送到 QCoreApplicationQApplication 实例进行处理和配送。QAbstractEventDispatcher 提供了对事件配送的精细控制。

对于事件处理的基本控制,请使用 QCoreApplication::processEvents

若要更精确地控制应用程序的事件循环,请调用 instance() 并对返回的 QAbstractEventDispatcher 对象调用函数。如果您想使用自己的 QAbstractEventDispatcher 实例或其子类的实例,必须在使用默认事件调度程序之前,通过 QCoreApplication::setEventDispatcher() 或 QThread::setEventDispatcher() 进行安装。

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

执行长时间操作的程序可以调用 processEvents(),使用不同 QEventLoop::ProcessEventsFlag 值的位或组合来控制应传递哪些事件。

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

另请参阅 QEventLoopQCoreApplicationQThread

成员函数文档

[显式构造函数] QAbstractEventDispatcher::QAbstractEventDispatcher(QObject *parent = nullptr)

使用指定的 parent 构造一个新的事件调度程序。

[虚函数] QAbstractEventDispatcher::~QAbstractEventDispatcher()

销毁事件调度程序。

[信号] void QAbstractEventDispatcher::aboutToBlock()

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

另请参阅 awake()。

[信号] void QAbstractEventDispatcher::awake()

当事件循环从一个可能阻塞的函数返回后发出此信号。

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

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

通过 installNativeEventFilter 设置的事件过滤器发送 message。此函数在事件过滤器返回 true 时返回 true,并在其他情况下返回 false 以指示应继续处理事件。

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

注意,message 的类型是平台相关的。有关详细信息,请参阅 QAbstractNativeEventFilter

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

void QAbstractEventDispatcher::installNativeEventFilter(QAbstractNativeEventFilter *filterObj)

为应用程序接收的所有原生事件安装事件过滤器 filterObj

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

nativeEventFilter() 函数如果事件应该被过滤(在这种情况下,停止),则应返回 true。如果返回 false,则允许正常的 Qt 处理继续:原生事件可以转换为一个 QEvent并由标准的 Qt event 过滤进行处理,例如 QObject::installEventFilter

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

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

为了最大程度提高可移植性,您应始终尽可能使用 QEvent 对象和 QObject::installEventFilter

另请参阅:QObject::installEventFilter

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

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

注意: 如果 Qt 没有构建线程支持,则忽略 thread 参数。

[纯虚] void QAbstractEventDispatcher::interrupt()

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

[纯虚] bool QAbstractEventDispatcher::processEvents(QEventLoop::ProcessEventsFlags flags)

处理符合 flags 的挂起事件,直到没有更多事件要处理。如果处理了事件,则返回 true;否则返回 false

如果函数具有长时间运行的操作,您希望使用 QEventLoop::ExcludeUserInputEvents 标志显示其进度,而不允许用户输入,则此函数特别有用。

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

  • 如果事件可用,则处理事件后此函数返回。
  • 如果没有事件可用,此函数将等待直到有更多事件可用,并在处理了新可用的事件后返回。

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

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

[纯虚函数] void QAbstractEventDispatcher::registerSocketNotifier(QSocketNotifier *notifier)

notifier 在事件循环中注册。子类必须实现此方法以便将套接字通知器与另一个事件循环关联。

int QAbstractEventDispatcher::registerTimer(qint64 interval, Qt::TimerType timerType, QObject *object)

为指定的 object 注册一个具有指定 intervaltimerType 的计时器,并返回计时器 ID。

[纯虚函数] void QAbstractEventDispatcher::registerTimer(int timerId, qint64 interval, Qt::TimerType timerType, QObject *object)

为给定的 object 注册一个指定 timerIdintervaltimerType 的计时器。

[纯虚函数] QList<QAbstractEventDispatcher::TimerInfo> QAbstractEventDispatcher::registeredTimers(QObject *object) const

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

另请参阅Qt::TimerType.

[纯虚函数] int QAbstractEventDispatcher::remainingTime(int timerId)

返回给定 timerId 的剩余时间(以毫秒为单位)。如果计时器未激活,则返回值将为 -1。如果计时器已超时,则返回值将为 0。

另请参阅Qt::TimerType.

void QAbstractEventDispatcher::removeNativeEventFilter(QAbstractNativeEventFilter *filter)

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

当此对象被销毁时,将自动移除该对象的全部事件过滤器。

移除事件过滤器总是安全的,即使在事件过滤器激活期间(即在 nativeEventFilter() 函数内部)也是如此。

另请参阅installNativeEventFilter() 和 QAbstractNativeEventFilter.

[纯虚函数] void QAbstractEventDispatcher::unregisterSocketNotifier(QSocketNotifier *notifier)

从事件派发器中注销 notifier。子类必须重新实现此方法以便将套接字通知器与另一个事件循环关联。重新实现必须调用基类实现。

[纯虚函数] bool QAbstractEventDispatcher::unregisterTimer(int timerId)

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

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

[纯虚函数] bool QAbstractEventDispatcher::unregisterTimers(QObject *object)

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

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

[纯虚函数] void QAbstractEventDispatcher::wakeUp()

唤醒事件循环。

注意: 此函数是 线程安全

另请参阅 awake()。

© 2024 Qt公司。在此包含的文档贡献是各自所有者的版权。提供的文档是在自由软件基金会发布和授权的 GNU自由文档许可证版本1.3 的条款下提供的。Qt及其相关标志是芬兰和/或其他国家的Qt公司的商标。所有其他商标均为其各自所有者的财产。