一、描述
QEventLoop 类提供了一种进入和离开事件循环的方法。
任何时候都可以创建一个 QEventLoop 对象并对其调用 exec() 以启动本地事件循环。在事件循环中,调用 exit() 将强制 exec() 返回。
二、类型成员
1、enum QEventLoop::ProcessEventsFlag:此枚举控制 processEvents() 函数处理的事件类型。
- AllEvents:所有事件。
- ExcludeUserInputEvents:不处理用户输入事件。事件不会被丢弃,它们将在下次调用 processEvents() 时不带 ExcludeUserInputEvents 标志时传递。
- ExcludeSocketNotifiers:不处理Socket通知程序事件。事件不会被丢弃,它们将在下次调用 processEvents() 时不带 ExcludeSocketNotifiers 标志时传递。
- WaitForMoreEvents:如果没有挂起的事件可用,则等待事件。
三、成员函数
1、int exec(QEventLoop::ProcessEventsFlags flags = AllEvents)
进入主事件循环并等待 exit() 被调用。返回传递给 exit() 的值。如果指定了标志,则仅处理标志允许的类型的事件。
需要调用这个函数来启动事件处理。主事件循环从窗口系统接收事件并将这些事件分派给应用程序小部件。
一般来说,在调用 exec() 之前不能发生任何用户交互。作为一种特殊情况,可以在调用 exec() 之前使用像 QMessageBox 这样的模态小部件,因为模态小部件使用它们自己的本地事件循环。
2、void exit(int returnCode = 0)
事件循环以返回码退出。调用此函数后,事件循环从对 exec() 的调用返回。 exec() 函数返回 returnCode。
按照惯例,returnCode 为 0 表示成功,任何非零值表示错误。
事件循环是否正在运行。事件循环从调用 exec() 到调用 exit() 的时间段被认为是运行的。
4、bool processEvents(QEventLoop::ProcessEventsFlags flags = AllEvents)
处理与标志匹配的待处理事件,直到没有更多事件要处理。
如果有长时间运行的操作并希望在不允许用户输入的情况下显示其进度,则此功能特别有用(使用 ExcludeUserInputEvents 标志)。
5、void processEvents(QEventLoop::ProcessEventsFlags flags, int maxTime) (最实用)
处理与标志匹配的挂起事件最多 maxTime 毫秒,或者直到没有更多事件要处理,以较短者为准。该函数不会连续处理事件,它在处理完所有可用事件后返回。指定 WaitForMoreEvents 标志没有意义,将被忽略。
6、void quit()
事件循环正常退出。等同于exit(0)。
唤醒事件循环。