QEventLoop 类

QEventLoop 类提供了一种进入和退出事件循环的方式。 更多信息...

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

公共类型

枚举ProcessEventsFlag { AllEvents, ExcludeUserInputEvents, ExcludeSocketNotifiers, WaitForMoreEvents }
标志ProcessEventsFlags

公共函数

QEventLoop(QObject *parent = nullptr)
虚拟~QEventLoop()
intexec(QEventLoop::ProcessEventsFlags flags = AllEvents)
boolisRunning() const
boolprocessEvents(QEventLoop::ProcessEventsFlags flags = AllEvents)
voidprocessEvents(QEventLoop::ProcessEventsFlags flags, int maxTime)
(since 6.7) voidprocessEvents(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline)
void唤醒()

重写的公共函数

虚拟 boolevent(QEvent *event) override

公共槽

voidexit(int returnCode = 0)
void退出()

详细描述

在任何时候,您都可以创建一个 QEventLoop 对象,并调用其上的 exec() 方法来启动一个本地事件循环。在事件循环内部,调用 exit() 将强制 exec() 返回。

另请参阅QAbstractEventDispatcher.

成员类型文档

enum QEventLoop::ProcessEventsFlag
QEventLoop::ProcessEventsFlags

该枚举控制 processEvents() 函数处理的事件类型。

常量描述
QEventLoop::AllEvents0x00所有事件。注意 DeferredDelete 事件被特别处理。有关更多详细信息,请参阅 QObject::deleteLater()。
QEventLoop::ExcludeUserInputEvents0x01不处理用户输入事件,如 ButtonPress 和 KeyPress。注意事件不会被丢弃;在下次调用 processEvents() method 时,事件会按顺序传递,除非有 ExcludeUserInputEvents 标志。
QEventLoop::ExcludeSocketNotifiers0x02不要处理套接字通知事件。请注意,事件不会被丢弃;在下次调用 processEvents() 时没有 ExcludeSocketNotifiers 标志将会再次传递。
QEventLoop::WaitForMoreEvents0x04如果没有挂起的实时事件,则等待事件。

ProcessEventsFlags 类型是 QFlags<ProcessEventsFlag> 的同义词。它存储了 ProcessEventsFlag 值的 OR组合。

另请参阅 processEvents().

成员函数文档

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

使用指定的 parent 构造事件循环对象。

[virtual noexcept] QEventLoop::~QEventLoop()

销毁事件循环对象。

[override virtual] bool QEventLoop::event(QEvent *event)

重实现: QObject::event(QEvent *e).

int QEventLoop::exec(QEventLoop::ProcessEventsFlags flags = AllEvents)

进入主事件循环并等待直到调用 exit()。返回传递给 exit() 的值。

如果指定了 flags,则只会处理 flags 允许的事件类型。

必须调用此函数才能开始事件处理。主事件循环从窗口系统接收事件并将这些事件调度到应用程序小部件。

一般来说,在调用 exec() 之前不能进行用户交互。作为一个特殊情况,可以在调用 exec() 之前使用类似 QMessageBox 的模态小部件,因为模态小部件使用它们自己的局部事件循环。

要使您的应用程序执行空闲处理(即在没有挂起事件时执行特殊函数),请使用超时为 0 的 QTimer。更复杂空闲处理方案可以通过使用 processEvents() 实现。

另请参阅 QCoreApplication::quit()、exit() 和 processEvents().

[slot] void QEventLoop::exit(int returnCode = 0)

告诉事件循环使用指定的返回代码退出。

在此函数调用之后,事件循环将从对 exec() 的调用返回。该 exec() 函数返回 returnCode

按照惯例,退出代码为 0 表示成功,任何非零值都表示错误。

注意,与同名的 C 库函数不同,此函数 确实 返回给调用者——停止的是事件处理。

另请参阅 QCoreApplication::quit()、quit() 和 exec().

bool QEventLoop::isRunning() const

如果事件循环正在运行,则返回 true;否则返回 false。事件循环从调用 exec() 的时间起,直到调用 exit() 为止被认为在运行。

另请参阅 exec() 和 exit().

bool QEventLoop::processEvents(QEventLoop::ProcessEventsFlags flags = AllEvents)

处理一些与flags匹配的挂起事件。如果处理了挂起事件,则返回true;否则返回false

此函数特别有用,如果你有一个长时间运行的操作,并且希望在用户输入的情况下显示其进度;例如,通过使用ExcludeUserInputEvents标志。

此函数是QAbstractEventDispatcher::processEvents函数的一个包装器。有关该函数的详细信息,请参阅其文档。

void QEventLoop::processEvents(QEventLoop::ProcessEventsFlags flags, int maxTime)

这是一个重载函数。

最多处理maxTime毫秒内匹配flags的挂起事件,或直到没有更多事件要处理,哪个先到就用哪个。

等同于调用

processEvents(flags, QDeadlineTimer(maxTime));

[since 6.7] void QEventLoop::processEvents(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline)

deadline过期之前处理匹配flags的挂起事件,或者直到没有更多事件要处理,哪个先发生就用哪个。此函数特别有用,如果你有一个长时间运行的操作,并且希望在用户输入的情况下显示其进度,例如,通过使用ExcludeUserInputEvents标志。

注意

  • 此函数不会连续处理事件;它会处理所有可用事件后在返回。
  • 指定WaitForMoreEvents标志没有意义,并且将被忽略。

此函数首次在Qt 6.7中引入。

[slot] void QEventLoop::quit()

告诉事件循环正常退出。

等同于exit(0)。

请参阅QCoreApplication::quit()和exit

void QEventLoop::wakeUp()

唤醒事件循环。

见亦QAbstractEventDispatcher::wakeUp

© 2024 The Qt Company Ltd. 本文档中包含的贡献属于其各自所有者。本文档按GNU自由文档许可版1.3的条款提供,该许可证由自由软件基金会发布。Qt及其相关标志为The Qt Company Ltd.在芬兰和其他国家的商标。所有其他商标均为其各自所有者的财产。