QEventLoop 類

QEventLoop 類提供進入和離開事件循環的手段。 更多...

頭: #include <QEventLoop>
qmake: QT += core
繼承: QObject

公共類型

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

公共函數

QEventLoop (QObject * parent = nullptr)
virtual ~QEventLoop ()
int exec (QEventLoop::ProcessEventsFlags flags = AllEvents)
void exit (int returnCode = 0)
bool isRunning () const
bool processEvents (QEventLoop::ProcessEventsFlags flags = AllEvents)
void processEvents (QEventLoop::ProcessEventsFlags flags , int maxTime )
void wakeUp ()

重實現公共函數

virtual bool event (QEvent * event ) override

公共槽

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 ().

成員函數文檔編製

QEventLoop:: QEventLoop ( QObject * parent = nullptr)

構造事件循環對象采用給定 parent .

[slot] void QEventLoop:: quit ()

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

如同 exit(0)。

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

[虛擬] 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 ().

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 毫秒,或直到沒有更多要處理事件為止,以較短者為準。此函數尤其有用,若有長時間運行操作且不允許用戶輸入想要展示其進度,即:通過使用 ExcludeUserInputEvents 標誌。

注意事項:

  • 此函數不連續處理事件;它返迴在處理所有可用事件之後。
  • 指定 WaitForMoreEvents 標誌沒有意義且會被忽略。

void QEventLoop:: wakeUp ()

喚醒事件循環。

另請參閱 QAbstractEventDispatcher::wakeUp ().