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)
(從 6.7 起) void processEvents (QEventLoop::ProcessEventsFlags flags , QDeadlineTimer deadline )
void processEvents (QEventLoop::ProcessEventsFlags flags , int maxTime )
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 使用它們自己的本地事件循環。

要使應用程序履行空閑處理 (即:執行特殊函數每當沒有待決事件時),使用 QChronoTimer with 0ns timeout. More sophisticated idle processing schemes can be achieved using 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 ()。見該函數的文檔編製瞭解細節。

[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 引入。

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));
					

這是重載函數。

[slot] void QEventLoop:: quit ()

告訴事件循環要正常退齣。

如同 exit(0)。

另請參閱 QCoreApplication::quit () 和 exit ().

void QEventLoop:: wakeUp ()

喚醒事件循環。

另請參閱 QAbstractEventDispatcher::wakeUp ().