QEventLoop Class
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) |
(since 6.7) void | processEvents(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline) |
| void | processEvents(QEventLoop::ProcessEventsFlags flags, int maxTime) |
| void | wakeUp() |
再実装されたパブリック関数
| virtual bool | event(QEvent *event) override |
パブリックスロット
詳細な説明
いつでも QEventLoop オブジェクトを作成し、そのオブジェクトに対して `exec()` を呼び出すことで、ローカルなイベントループを開始できます。イベントループ内から `exit()` を呼び出すと、exec() が強制的に終了します。
QAbstractEventDispatcherも参照してください 。
メンバ型のドキュメント
enum QEventLoop::ProcessEventsFlag
flags QEventLoop::ProcessEventsFlags
この列挙型は、processEvents() 関数によって処理されるイベントの種類を制御します。
| 定数 | 定数名 | 説明 |
|---|---|---|
QEventLoop::AllEvents | 0x00 | すべてのイベント。DeferredDelete イベントは特別に処理されることに注意してください。詳細については、QObject::deleteLater() を参照してください。 |
QEventLoop::ExcludeUserInputEvents | 0x01 | ButtonPress や KeyPress などのユーザー入力イベントは処理しません。これらのイベントは破棄されるわけではなく、次に ExcludeUserInputEvents フラグを指定せずにprocessEvents() が呼び出されたときに配信されることに注意してください。 |
QEventLoop::ExcludeSocketNotifiers | 0x02 | ソケット通知イベントは処理しないでください。これらのイベントは破棄されるわけではなく、次に ExcludeSocketNotifiers フラグを指定せずにprocessEvents() が呼び出された際に配信されることに注意してください。 |
QEventLoop::WaitForMoreEvents | 0x04 | 保留中のイベントがない場合は、イベントを待機します。 |
ProcessEventsFlags 型は、QFlags<ProcessEventsFlag> の typedef です。これは、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 で許可されたタイプのイベントのみが処理されます。
イベント処理を開始するには、この関数を呼び出す必要があります。メインイベントループはウィンドウシステムからイベントを受け取り、それらをアプリケーションウィジェットにディスパッチします。
一般的に、exec() を呼び出すまでは、ユーザーとの対話を行うことはできません。例外として、QMessageBox のようなモーダルウィジェットは、独自のローカルイベントループを使用するため、exec() を呼び出す前でも使用することができます。
アプリケーションでアイドル処理(つまり、保留中のイベントがないときに特別な関数を実行すること)を行うには、タイムアウトを 0ns に設定したQChronoTimer を使用します。より高度なアイドル処理は、processEvents() を使用することで実現できます。
QCoreApplication::quit()、exit()、およびprocessEvents()も参照してください 。
[slot] void QEventLoop::exit(int returnCode = 0)
イベントループに、リターンコードを指定して終了するよう指示します。
この関数が呼び出されると、イベントループはexec()の呼び出しから戻ります。exec()関数はreturnCode を返します。
慣例により、returnCode が0の場合は成功を意味し、0以外の値はエラーを示します。
なお、同名のCライブラリ関数とは異なり、この関数は呼び出し元へ戻る(呼び出し元への制御が戻る)のではなく、イベント処理が停止することに注意してください。
QCoreApplication::quit()、quit()、およびexec()も参照してください 。
bool QEventLoop::isRunning() const
イベントループが実行中の場合は `true ` を返し、そうでない場合は `false` を返します。イベントループは、exec() が呼び出された時点から、exit() が呼び出される時点まで、実行中とみなされます。
bool QEventLoop::processEvents(QEventLoop::ProcessEventsFlags flags = AllEvents)
flags に一致する未処理のイベントを処理します。未処理のイベントが処理された場合は `true ` を返し、そうでない場合は `false` を返します。
この関数は、長時間かかる処理があり、ユーザーからの入力を許可せずにその進行状況を表示したい場合、つまりExcludeUserInputEvents フラグを使用する場合に特に役立ちます。
この関数は、単に `QAbstractEventDispatcher::processEvents()` のラッパーです。詳細については、その関数のドキュメントを参照してください。
[since 6.7] void QEventLoop::processEvents(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline)
flags に一致する保留中のイベントを、deadline の有効期限が切れるか、処理すべきイベントがなくなるかのいずれか早い方まで処理します。この関数は、長時間かかる操作があり、ユーザー入力を許可せずに(つまり、ExcludeUserInputEvents フラグを使用して)その進行状況を表示したい場合に特に役立ちます。
注:
- この関数はイベントを継続的に処理するものではなく、利用可能なすべてのイベントの処理が完了した後に返ります。
- WaitForMoreEvents フラグを指定しても意味がなく、無視されます。
この関数は Qt 6.7 で導入されました。
void QEventLoop::processEvents(QEventLoop::ProcessEventsFlags flags, int maxTime)
flags に一致する保留中のイベントを、最大maxTime ミリ秒間、または処理すべきイベントがなくなるまでのいずれか短い方の期間、処理します。
以下の呼び出しと同等です:
processEvents(flags, QDeadlineTimer(maxTime));これはオーバーロードされた関数です。
[slot] void QEventLoop::quit()
イベントループを正常に終了させます。
exit(0) と同じです。
QCoreApplication::quit() およびexit()も参照してください 。
void QEventLoop::wakeUp()
イベントループを起動します。
QAbstractEventDispatcher::wakeUp()も参照してください 。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.