QAbstractEventDispatcher Class
QAbstractEventDispatcher クラスは、Qt のイベントキューを管理するためのインターフェースを提供します。詳細...
| ヘッダー: | #include <QAbstractEventDispatcher> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 継承元: | QObject |
| 継承元: |
- 継承されたメンバーを含むすべてのメンバーの一覧
- 非推奨のメンバ
- QAbstractEventDispatcher はEvent Classes の一部です。
パブリック型
| struct | TimerInfoV2 |
| Duration |
パブリック関数
| QAbstractEventDispatcher(QObject *parent = nullptr) | |
| virtual | ~QAbstractEventDispatcher() |
| bool | filterNativeEvent(const QByteArray &eventType, void *message, qintptr *result) |
| void | installNativeEventFilter(QAbstractNativeEventFilter *filterObj) |
| virtual void | interrupt() = 0 |
| virtual bool | processEvents(QEventLoop::ProcessEventsFlags flags) = 0 |
| virtual void | registerSocketNotifier(QSocketNotifier *notifier) = 0 |
(since 6.8) void | registerTimer(Qt::TimerId timerId, QAbstractEventDispatcher::Duration interval, Qt::TimerType timerType, QObject *object) |
| virtual void | registerTimer(int timerId, qint64 interval, Qt::TimerType timerType, QObject *object) = 0 |
(since 6.8) Qt::TimerId | registerTimer(QAbstractEventDispatcher::Duration interval, Qt::TimerType timerType, QObject *object) |
| virtual QList<QAbstractEventDispatcher::TimerInfo> | registeredTimers(QObject *object) const = 0 |
| virtual int | remainingTime(int timerId) = 0 |
| QAbstractEventDispatcher::Duration | remainingTime(Qt::TimerId timerId) const |
| void | removeNativeEventFilter(QAbstractNativeEventFilter *filter) |
(since 6.8) QList<QAbstractEventDispatcher::TimerInfoV2> | timersForObject(QObject *object) const |
| virtual void | unregisterSocketNotifier(QSocketNotifier *notifier) = 0 |
(since 6.8) bool | unregisterTimer(Qt::TimerId timerId) |
| virtual bool | unregisterTimer(int timerId) = 0 |
| virtual bool | unregisterTimers(QObject *object) = 0 |
| virtual void | wakeUp() = 0 |
シグナル
| void | aboutToBlock() |
| void | awake() |
静的パブリックメンバー
| QAbstractEventDispatcher * | instance(QThread *thread = nullptr) |
詳細な説明
イベントディスパッチャは、ウィンドウシステムやその他のソースからイベントを受信します。その後、処理と配信のために、QCoreApplication またはQApplication のインスタンスにイベントを送信します。QAbstractEventDispatcher を使用すると、イベントの配信をきめ細かく制御できます。
イベント処理を簡単に制御するには、QCoreApplication::processEvents() を使用します。
アプリケーションのイベントループをより細かく制御するには、instance() を呼び出し、返された QAbstractEventDispatcher オブジェクトの関数を呼び出します。 独自の QAbstractEventDispatcher インスタンスや QAbstractEventDispatcher のサブクラスを使用する場合は、デフォルトのイベントディスパッチャがインストールされる前に、QCoreApplication::setEventDispatcher() またはQThread::setEventDispatcher() を使用してインストールする必要があります。
メインのイベントループは、QCoreApplication::exec() を呼び出すことで開始され、QCoreApplication::exit() を呼び出すことで停止します。ローカルイベントループは、QEventLoop を使用して作成できます。
長時間かかる処理を実行するプログラムでは、processEvents() を呼び出す際に、QEventLoop::ProcessEventsFlag の各種値をビット単位の OR 演算で組み合わせることで、どのイベントを配信するかを制御できます。
QAbstractEventDispatcher を使用すると、外部のイベントループを Qt のイベントループと統合することも可能です。
QEventLoop 、QCoreApplication 、およびQThreadも参照してください 。
メンバ型のドキュメント
[alias] QAbstractEventDispatcher::Duration
このクラス内のさまざまなAPIで使用されるstd::chrono::duration 型です。この型は、より細かい粒度やより粗い粒度への移行を容易にするために存在します。
現在のすべてのプラットフォームにおいて、これは `nanoseconds` です。
メンバ関数のドキュメント
[explicit] QAbstractEventDispatcher::QAbstractEventDispatcher(QObject *parent = nullptr)
指定されたparent を使用して、新しいイベントディスパッチャを構築します。
[virtual noexcept] QAbstractEventDispatcher::~QAbstractEventDispatcher()
イベントディスパッチャを破棄します。
[signal] void QAbstractEventDispatcher::aboutToBlock()
このシグナルは、イベントループがブロックする可能性のある関数を呼び出す前に発せられます。
awake()も参照してください 。
[signal] void QAbstractEventDispatcher::awake()
このシグナルは、ブロックする可能性のある関数からイベントループが戻った後に発行されます。
wakeUp() およびaboutToBlock()も参照してください 。
bool QAbstractEventDispatcher::filterNativeEvent(const QByteArray &eventType, void *message, qintptr *result)
installNativeEventFilter() で設定されたイベントフィルタを通じて、message を送信します。この関数は、いずれかのイベントフィルタがtrue を返すとすぐにtrue を返し、それ以外の場合は false を返して、イベントの処理を継続すべきであることを示します。
QAbstractEventDispatcher のサブクラスは、アプリケーションで使用される可能性のある拡張機能との互換性を確保するため、システムから受信したすべてのメッセージに対してこの関数を呼び出す必要があります。イベント型eventType は、実行時に選択されたプラットフォームプラグインに固有のものであり、メッセージを適切な型にキャストするために使用できます。result ポインタは Windows でのみ使用され、LRESULT ポインタに対応します。
なお、message の型はプラットフォームに依存することに注意してください。詳細については、QAbstractNativeEventFilter を参照してください。
installNativeEventFilter() およびQAbstractNativeEventFilter::nativeEventFilter()も参照してください 。
void QAbstractEventDispatcher::installNativeEventFilter(QAbstractNativeEventFilter *filterObj)
アプリケーションが受信するすべてのネイティブイベントに対して、イベントフィルター `filterObj ` を設定します。
イベントフィルタ `filterObj ` は、nativeEventFilter() 関数を通じてイベントを受け取ります。この関数は、すべてのスレッドが受信したすべてのイベントに対して呼び出されます。
nativeEventFilter() 関数は、イベントをフィルタリング(この場合は停止)する必要がある場合は true を返す必要があります。通常の Qt 処理を継続させる場合は false を返す必要があります。そうすることで、ネイティブイベントはQEvent に変換され、標準の Qtevent フィルタリング(例:QObject::installEventFilter())によって処理されるようになります。
複数のイベントフィルタが設定されている場合、最後に設定されたフィルタが最初に有効になります。
注:ここで設定されるフィルタ関数は 、ネイティブメッセージ、つまり MSG または XEvent 構造体を受け取ります。
移植性を最大限に高めるためには、可能な限り常にQEvent オブジェクトとQObject::installEventFilter() を使用するようにしてください。
QObject::installEventFilter()も参照してください 。
[static] QAbstractEventDispatcher *QAbstractEventDispatcher::instance(QThread *thread = nullptr)
指定されたthread に対するイベントディスパッチャオブジェクトへのポインタを返します。thread がnullptr の場合、現在のスレッドが使用されます。指定されたスレッドに対応するイベントディスパッチャが存在しない場合、この関数はnullptr を返します。
注:Qtがスレッドサポートなしでビルドされている場合、thread 引数は無視されます。
[pure virtual] void QAbstractEventDispatcher::interrupt()
イベントのディスパッチを中断します。イベントディスパッチャは、processEvents() からできるだけ早く戻ります。
[pure virtual] bool QAbstractEventDispatcher::processEvents(QEventLoop::ProcessEventsFlags flags)
flags に一致する保留中のイベントを、処理すべきイベントがなくなるまで処理します。イベントが処理された場合はtrue を返し、そうでない場合はfalse を返します。
この関数は、長時間かかる処理があり、QEventLoop::ExcludeUserInputEvents フラグを使用してユーザー入力を許可せずにその進行状況を表示したい場合に特に有用です。
flags でQEventLoop::WaitForMoreEvents フラグが設定されている場合、この関数の動作は次のとおりです。
- 利用可能なイベントがある場合、この関数はそれらを処理した後に戻ります。
- 利用可能なイベントがない場合、この関数は、イベントが利用可能になるまで待機し、新たに利用可能になったイベントを処理した後に戻ります。
flags で `QEventLoop::WaitForMoreEvents ` フラグが設定されておらず、利用可能なイベントがない場合、この関数は直ちに返ります。
注:この関数はイベントを継続的に処理するものではなく、利用可能なイベントがすべて処理された後に返ります。
[pure virtual] void QAbstractEventDispatcher::registerSocketNotifier(QSocketNotifier *notifier)
notifier をイベントループに登録します。サブクラスは、ソケット通知機能を別のイベントループに紐付けるために、このメソッドを実装する必要があります。
[since 6.8] void QAbstractEventDispatcher::registerTimer(Qt::TimerId timerId, QAbstractEventDispatcher::Duration interval, Qt::TimerType timerType, QObject *object)
指定された `timerId`、`interval`、および `timerType ` を使用して、指定された `object` に対してタイマーを登録します。
この関数は Qt 6.8 で導入されました。
unregisterTimer() およびtimersForObject()も参照してください 。
[pure virtual] void QAbstractEventDispatcher::registerTimer(int timerId, qint64 interval, Qt::TimerType timerType, QObject *object)
指定された `timerId`、`interval`、および `timerType ` を使用して、指定された `object` に対してタイマーを登録します。
[since 6.8] Qt::TimerId QAbstractEventDispatcher::registerTimer(QAbstractEventDispatcher::Duration interval, Qt::TimerType timerType, QObject *object)
指定されたinterval およびtimerType を用いて、指定されたobject に対してタイマーを登録し、タイマーIDを返します。
これはオーバーロードされた関数です。
この関数はQt 6.8で導入されました。
[pure virtual] QList<QAbstractEventDispatcher::TimerInfo> QAbstractEventDispatcher::registeredTimers(QObject *object) const
object に登録されているタイマーのリストを返します。TimerInfo 構造体には、timerId 、interval 、およびtimerType というメンバがあります。
Qt::TimerTypeも参照してください 。
[pure virtual] int QAbstractEventDispatcher::remainingTime(int timerId)
指定されたtimerId の残り時間をミリ秒単位で返します。タイマーが非アクティブな場合、戻り値は-1になります。タイマーが期限切れの場合、戻り値は0になります。
「Qt::TimerType」も参照してください 。
QAbstractEventDispatcher::Duration QAbstractEventDispatcher::remainingTime(Qt::TimerId timerId) const
指定されたtimerId を持つタイマーの残り時間を返します。タイマーが非アクティブの場合、返される値は負の数になります。タイマーの時間が経過している場合、返される値は0になります。
関連項目: Qt::TimerType 、registerTimer()、およびunregisterTimer()。
void QAbstractEventDispatcher::removeNativeEventFilter(QAbstractNativeEventFilter *filter)
このオブジェクトからイベントフィルタ `filter ` を削除します。そのようなイベントフィルタがインストールされていない場合、このリクエストは無視されます。
このオブジェクトが破棄されると、このオブジェクトに対するすべてのイベントフィルタが自動的に削除されます。
イベントフィルタの有効化中(つまり、nativeEventFilter() 関数内からであっても)であっても、イベントフィルタを削除することは常に安全です。
installNativeEventFilter() およびQAbstractNativeEventFilterも参照してください 。
[since 6.8] QList<QAbstractEventDispatcher::TimerInfoV2> QAbstractEventDispatcher::timersForObject(QObject *object) const
object に登録されたタイマーのリストを返します。TimerInfoV2 構造体には、timerId 、interval 、およびtimerType というメンバがあります。
この関数は Qt 6.8 で導入されました。
Qt::TimerType 、registerTimer()、およびunregisterTimer()も参照してください 。
[pure virtual] void QAbstractEventDispatcher::unregisterSocketNotifier(QSocketNotifier *notifier)
notifier をイベントディスパッチャから登録解除します。サブクラスは、ソケット通知機能を別のイベントループに紐付けるために、このメソッドを再実装する必要があります。再実装の際は、基底クラスの実装を呼び出す必要があります。
[since 6.8] bool QAbstractEventDispatcher::unregisterTimer(Qt::TimerId timerId)
指定されたtimerId に対するタイマーの登録を解除します。成功した場合はtrue を返し、失敗した場合はfalse を返します。
この関数は Qt 6.8 で導入されました。
registerTimer() およびunregisterTimers()も参照してください 。
[pure virtual] bool QAbstractEventDispatcher::unregisterTimer(int timerId)
指定されたtimerId を使用して、タイマーの登録を解除します。成功した場合はtrue を返し、失敗した場合はfalse を返します。
registerTimer() およびunregisterTimers()も参照してください 。
[pure virtual] bool QAbstractEventDispatcher::unregisterTimers(QObject *object)
指定されたobject に関連付けられているすべてのタイマーの登録を解除します。すべてのタイマーの解除に成功した場合はtrue を返し、失敗した場合はfalse を返します。
unregisterTimer() およびregisteredTimers()も参照してください 。
[pure virtual] void QAbstractEventDispatcher::wakeUp()
イベントループを再開します。
注: この関数はスレッドセーフです。
awake()も参照してください 。
© 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.