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 .
此枚举控制处理事件的类型通过 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).
进入主事件循环并等待,直到 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 ().
返回
true
若事件循环正在运行;否则返回 false。认为事件循环开始运行当
exec
() 被调用直到
exit
() 被调用。
Processes some pending events that match
flags
。返回
true
若待决事件被处理;否则返回
false
.
此函数尤其有用,若有长时间运行操作且不允许用户输入想要展示其进度;即:通过使用 ExcludeUserInputEvents 标志。
此函数仅仅是包裹器为 QAbstractEventDispatcher::processEvents ()。见该函数的文档编制了解细节。
这是重载函数。
处理待决事件匹配 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 标志。
注意事项:
该函数在 Qt 6.7 引入。
[slot]
void
QEventLoop::
quit
()
告诉事件循环要正常退出。
如同 exit(0)。
另请参阅 QCoreApplication::quit () 和 exit ().
唤醒事件循环。
另请参阅 QAbstractEventDispatcher::wakeUp ().