QEventLoop 类

QEventLoop 类提供进入和离开事件循环的手段。 更多...

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

公共类型

enum ProcessEventsFlag { AllEvents, ExcludeUserInputEvents, ExcludeSocketNotifiers, WaitForMoreEvents }
flags ProcessEventsFlags

公共函数

QEventLoop (QObject * parent = nullptr)
virtual ~QEventLoop ()
int exec (QEventLoop::ProcessEventsFlags flags = AllEvents)
bool isRunning () const
bool processEvents (QEventLoop::ProcessEventsFlags flags = AllEvents)
void processEvents (QEventLoop::ProcessEventsFlags flags , int maxTime )
(从 6.7 起) void processEvents (QEventLoop::ProcessEventsFlags flags , QDeadlineTimer deadline )
void wakeUp ()

重实现公共函数

virtual bool event (QEvent * event ) override

公共槽

void exit (int returnCode = 0)
void quit ()

详细描述

在任何时候,可以创建 QEventLoop 对象并调用 exec () 当要启动本地事件循环时。从事件循环中,调用 exit () 将强制 exec () 以返回。

另请参阅 QAbstractEventDispatcher .

成员类型文档编制

enum QEventLoop:: ProcessEventsFlag
flags QEventLoop:: ProcessEventsFlags

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

常量 描述
QEventLoop::AllEvents 0x00 所有事件。注意: DeferredDelete 事件会被特殊处理。见 QObject::deleteLater () 了解更多细节。
QEventLoop::ExcludeUserInputEvents 0x01 不处理用户输入事件,譬如 ButtonPress 和 KeyPress。注意,事件未被丢弃;会交付他们当下次 processEvents () 被调用时 (没有 ExcludeUserInputEvents 标志)。
QEventLoop::ExcludeSocketNotifiers 0x02 不处理套接字通知事件。注意,事件未被丢弃;会交付他们当下次 processEvents () 被调用时 (没有 ExcludeSocketNotifiers 标志)。
QEventLoop::WaitForMoreEvents 0x04 等待事件,若没有待决事件可用。

ProcessEventsFlags 类型是 typedef 对于 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 会被处理。

有必要调用此函数以启动事件处理。主事件循环从窗口系统接收事件,并将其分派给应用程序 Widget。

一般来说,不能发生用户交互在调用 exec() 之前。作为特殊情况,模态 Widget 像 QMessageBox 可以使用在调用 exec() 之前,因为模态 Widget 使用它们自己的本地事件循环。

要使应用程序履行空闲处理 (即:执行特殊函数每当没有待决事件时),使用 QTimer 采用 0 超时。可以达成更完备空闲处理方案使用 processEvents ().

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

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

告诉事件循环,采用返回代码退出。

在此函数被调用之后,事件循环返回从调用 exec ()。 exec () 函数返回 returnCode .

按约定, returnCode 0 意味着成功,而任何非零值指示出错。

注意:不像同名 C 库函数,此函数 does 会返回给调用者 – 停止的是事件处理。

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

bool QEventLoop:: isRunning () const

返回 true 若事件循环正在运行;否则返回 false。认为事件循环开始运行当 exec () 被调用直到 exit () 被调用。

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

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

Processes some pending events that match flags 。返回 true 若待决事件被处理;否则返回 false .

此函数尤其有用,若有长时间运行操作且不允许用户输入想要展示其进度;即:通过使用 ExcludeUserInputEvents 标志。

此函数仅仅是包裹器为 QAbstractEventDispatcher::processEvents ()。见该函数的文档编制了解细节。

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

这是重载函数。

处理待决事件匹配 flags 对于最大 maxTime milliseconds, or until there are no more events to process, whichever is shorter.

Equivalent to calling:

processEvents(flags, QDeadlineTimer(maxTime));
					

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

处理待决事件匹配 flags 直到 deadline has expired, or until there are no more events to process, whichever happens first. This function is especially useful if you have a long running operation and want to show its progress without allowing user input, i.e. by using the ExcludeUserInputEvents 标志。

注意事项:

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

该函数在 Qt 6.7 引入。

[slot] void QEventLoop:: quit ()

告诉事件循环要正常退出。

如同 exit(0)。

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

void QEventLoop:: wakeUp ()

唤醒事件循环。

另请参阅 QAbstractEventDispatcher::wakeUp ().