このページでは

QStateMachine Class

QStateMachine クラスは、階層型の有限状態マシンを提供します。詳細...

ヘッダー: #include <QStateMachine>
CMake: find_package(Qt6 REQUIRED COMPONENTS StateMachine)
target_link_libraries(mytarget PRIVATE Qt6::StateMachine)
qmake: QT += statemachine
継承元: QState

注:このクラスのすべての関数は再入可能です。

注:以下の関数もスレッドセーフです:

公開型

class SignalEvent
class WrappedEvent
enum Error { NoError, NoInitialStateError, NoDefaultStateInHistoryStateError, NoCommonAncestorForTransitionError, StateMachineChildModeSetToParallelError }
enum EventPriority { NormalPriority, HighPriority }

プロパティ

パブリック関数

QStateMachine(QObject *parent = nullptr)
virtual ~QStateMachine()
void addDefaultAnimation(QAbstractAnimation *animation)
void addState(QAbstractState *state)
QBindable<bool> bindableAnimated()
QBindable<QString> bindableErrorString() const
QBindable<QState::RestorePolicy> bindableGlobalRestorePolicy()
bool cancelDelayedEvent(int id)
void clearError()
QSet<QAbstractState *> configuration() const
QList<QAbstractAnimation *> defaultAnimations() const
QStateMachine::Error error() const
QString errorString() const
QState::RestorePolicy globalRestorePolicy() const
bool isAnimated() const
bool isRunning() const
int postDelayedEvent(QEvent *event, int delay)
int postDelayedEvent(QEvent *event, std::chrono::milliseconds delay)
void postEvent(QEvent *event, QStateMachine::EventPriority priority = NormalPriority)
void removeDefaultAnimation(QAbstractAnimation *animation)
void removeState(QAbstractState *state)
void setAnimated(bool enabled)
void setGlobalRestorePolicy(QState::RestorePolicy restorePolicy)

再実装されたパブリック関数

virtual bool eventFilter(QObject *watched, QEvent *event) override

パブリックスロット

void setRunning(bool running)
void start()
void stop()

シグナル

void runningChanged(bool running)
void started()
void stopped()

再実装されたプロテクト関数

virtual bool event(QEvent *e) override
virtual void onEntry(QEvent *event) override
virtual void onExit(QEvent *event) override

詳細な説明

QStateMachine は、ステートチャートの概念と表記法に基づいています。QStateMachine は、Qt State Machine フレームワークの一部です。

ステートマシンは、一連の状態(QAbstractState を継承するクラス)と、それらの状態間の遷移(QAbstractTransition の派生クラス)を管理します。これらの状態と遷移によって、状態グラフが定義されます。状態グラフが構築されると、ステートマシンはそれを実行することができます。 QStateMachineの実行アルゴリズムは、State Chart XML(SCXML)アルゴリズムに基づいています。フレームワークの概要では、いくつかの状態グラフと、それらを構築するためのコードが紹介されています。

addState() 関数を使用して、ステートマシンにトップレベルのステートを追加します。ステートの削除には、removeState() 関数を使用します。マシンの実行中にステートを削除することは推奨されません。

ステートマシンを起動する前に、initial state を設定する必要があります。初期状態とは、起動時にステートマシンが移行する状態のことです。その後、start() を使用してステートマシンを起動できます。初期状態に移行すると、started() シグナルが発信されます。

このステートマシンはイベント駆動型であり、独自のイベントループを維持します。イベントは `postEvent()` を通じてステートマシンに投稿されます。これは、実行が非同期に行われることを意味し、イベントループが実行されていない状態では処理が進まないことに注意してください。 通常、Qtの遷移(例:QEventTransition およびそのサブクラス)がこれを処理するため、マシンに直接イベントを投稿する必要はありません。ただし、イベントによってトリガーされるカスタム遷移の場合、postEvent()が役立ちます。

ステートマシンは、最上位の最終状態に入るまでイベントを処理し、遷移を繰り返します。その後、ステートマシンは `finished()` シグナルを発行します。また、ステートマシンを明示的に `stop()` することも可能です。この場合、`stopped()` シグナルが発行されます。

以下のコードスニペットは、ボタンがクリックされたときに処理を終了するステートマシンを示しています:

QPushButton button;

QStateMachine machine;
QState *s1 = new QState();
s1->assignProperty(&button, "text", "Click me");

QFinalState *s2 = new QFinalState();
s1->addTransition(&button, &QPushButton::clicked, s2);

machine.addState(s1);
machine.addState(s2);
machine.setInitialState(s1);
machine.start();

このコード例では、`QAbstractState` を継承する `QState` を使用しています。`QState ` クラスは、状態への移行時や状態からの退出時に、QObjectのプロパティを設定したりメソッドを呼び出したりするために使用できる状態を提供します。また、この例にあるような `QSignalTransition` など、遷移を追加するための便利な関数も含まれています。詳細については、`QState ` クラスの説明を参照してください。

エラーが発生した場合、マシンはerror state を検索し、利用可能な場合はこの状態に入ります。 発生しうるエラーの種類は、Error 列挙型で定義されています。エラー状態に入った後、error() を使用してエラーの種類を取得できます。エラー状態に入った場合でも、状態グラフの実行は停止しません。エラー状態に該当するエラー状態がない場合、マシンの実行は停止し、コンソールにエラーメッセージが出力されます。

注:重要 :ステートマシンのChildMode をparallel(ParallelStates )に設定すると、ステートマシンが無効になります。このプロパティは、ExclusiveStates にのみ設定(または維持)する必要があります。

関連項目: QAbstractState 、QAbstractTransition 、QState 、およびQt State Machine の概要。

メンバ型に関するドキュメント

enum QStateMachine::Error

この列挙型は、実行時にステートマシンで発生しうるエラーを定義します。ステートマシンが実行中に回復不可能なエラーに遭遇した場合、error() によって返されるエラーコードと、errorString() によって返されるエラーメッセージを設定し、エラーのコンテキストに基づいてエラー状態に移行します。

定数値説明
QStateMachine::NoError0エラーは発生していません。
QStateMachine::NoInitialStateError1マシンが、初期状態が設定されていない子を持つQState に入った。このエラーのコンテキストは、初期状態が欠落している状態である。
QStateMachine::NoDefaultStateInHistoryStateError2マシンが、デフォルト状態が設定されていないQHistoryState に入った。このエラーのコンテキストは、デフォルト状態が欠落しているQHistoryState である。
QStateMachine::NoCommonAncestorForTransitionError3マシンが、送信元と宛先が同じ状態ツリーに属しておらず、したがって同じステートマシンに属していない遷移を選択しました。一般的に、これは状態のいずれかに親が指定されていないか、どのマシンにも追加されていないことを意味します。このエラーのコンテキストは、遷移の送信元状態です。
QStateMachine::StateMachineChildModeSetToParallelError4マシンのchildMode プロパティがQState::ParallelStates に設定されていました。これは無効です。並列として宣言できるのは状態のみであり、ステートマシン自体は宣言できません。この列挙型値はQt 5.14で追加されました。

setErrorState()も参照してください 。

enum QStateMachine::EventPriority

この列挙型は、postEvent() を使用してステートマシンに投稿されるイベントの優先度を指定します。

優先度の高いイベントは、通常の優先度のイベントよりも先に処理されます。

定数定数説明
QStateMachine::NormalPriority0イベントの優先度は通常です。
QStateMachine::HighPriority1イベントの優先度は高です。

プロパティのドキュメント

[bindable] animated : bool

注:この プロパティは、QProperty バインディングに対応しています。

このプロパティは、アニメーションが有効かどうかを指定します。

このプロパティのデフォルト値は `true` です。

関連項目: QAbstractTransition::addAnimation()

アクセス関数:

bool isAnimated() const
void setAnimated(bool enabled)

[bindable read-only] errorString : QString

注:この プロパティは、QProperty のバインディングに対応しています。

このプロパティには、このステートマシンのエラー文字列が格納されます

アクセス関数:

QString errorString() const

[bindable] globalRestorePolicy : QState::RestorePolicy

注:この プロパティは、QProperty バインディングに対応しています。

このプロパティには、このステートマシンの状態に対する復元ポリシーが格納されます。

このプロパティのデフォルト値は「QState::DontRestoreProperties 」です。

アクセス関数:

QState::RestorePolicy globalRestorePolicy() const
void setGlobalRestorePolicy(QState::RestorePolicy restorePolicy)

running : bool

このプロパティは、このステートマシンの実行状態を保持します

アクセス関数:

bool isRunning() const
void setRunning(bool running)

通知シグナル:

void runningChanged(bool running)

関連項目: ` start()`, `stop()`, `started()`, `stopped()`, および `runningChanged()`。

メンバ関数のドキュメント

[explicit] QStateMachine::QStateMachine(QObject *parent = nullptr)

指定されたparent を使用して、新しいステートマシンを構築します。

[virtual noexcept] QStateMachine::~QStateMachine()

このステートマシンを破棄します。

void QStateMachine::addDefaultAnimation(QAbstractAnimation *animation)

すべての遷移において考慮されるデフォルトのanimation を追加します。

void QStateMachine::addState(QAbstractState *state)

指定されたstate をこのステートマシンに追加します。そのステートはトップレベルのステートとなり、ステートマシンがそのステートの所有権を取得します。

その状態がすでに別のステートマシンに存在している場合は、まず元のステートマシンから削除された後、このステートマシンに追加されます。

removeState() およびsetInitialState()も参照してください 。

bool QStateMachine::cancelDelayedEvent(int id)

指定されたid で識別される遅延イベントをキャンセルします。idには、postDelayedEvent()の呼び出しによって返される値を指定する必要があります。イベントのキャンセルに成功した場合はtrue を返し、失敗した場合はfalse を返します。

注: この関数はスレッドセーフです。

関連項目: postDelayedEvent()。

void QStateMachine::clearError()

ステートマシンのエラー文字列とエラーコードをクリアします。

QSet<QAbstractState *> QStateMachine::configuration() const

このステートマシンが現在属している、一貫性のある状態の最大集合(並列状態および最終状態を含む)を返します。状態 `s ` が構成 `c` に含まれている場合、`s ` の親状態も常に `c` に含まれます。ただし、マシン自体は構成の明示的な要素ではないことに注意してください。

QList<QAbstractAnimation *> QStateMachine::defaultAnimations() const

あらゆるトランジションにおいて候補となるデフォルトのアニメーションのリストを返します。

QStateMachine::Error QStateMachine::error() const

ステートマシンで最後に発生したエラーのエラーコードを返します。

QString QStateMachine::errorString() const

ステートマシンで最後に発生したエラーのエラー文字列を返します。

注: プロパティ errorStringのゲッター関数です 。

[override virtual protected] bool QStateMachine::event(QEvent *e)

QState::event(QEvent *e) を再実装します。

[override virtual] bool QStateMachine::eventFilter(QObject *watched, QEvent *event)

QObject::eventFilter(QObject *watched, QEvent *event) を再実装します。

QState::RestorePolicy QStateMachine::globalRestorePolicy() const

ステートマシンの復元ポリシーを返します。

注: プロパティ `globalRestorePolicy`のゲッター 関数です。

関連項目: setGlobalRestorePolicy()。

bool QStateMachine::isAnimated() const

このステートマシンでアニメーションが有効になっているかどうかを返します。

注: プロパティ `animated`のゲッター 関数です。

[override virtual protected] void QStateMachine::onEntry(QEvent *event)

QState::onEntry(QEvent *event) を再実装します。

この関数は、start() を呼び出してステートマシンを起動します。

[override virtual protected] void QStateMachine::onExit(QEvent *event)

QState::onExit(QEvent *event) を再実装します。

この関数は、stop() を呼び出してステートマシンを停止し、その後、stopped() シグナルを発生させます。

int QStateMachine::postDelayedEvent(QEvent *event, int delay)

指定されたevent を、指定されたdelay (ミリ秒単位)の遅延を付けて、このステートマシンによる処理のために投稿します。遅延イベントに関連付けられた識別子を返します。イベントを投稿できなかった場合は-1を返します。

この関数は即座に返ります。遅延時間が経過すると、イベントは処理のためにステートマシンのイベントキューに追加されます。ステートマシンはイベントの所有権を取得し、処理が完了するとそのイベントを削除します。

イベントを投稿できるのは、ステートマシンが実行中の場合のみです。

注: この関数はスレッドセーフです。

関連項目: cancelDelayedEvent() およびpostEvent()。

int QStateMachine::postDelayedEvent(QEvent *event, std::chrono::milliseconds delay)

指定されたevent を、指定されたdelay (ミリ秒単位)の遅延時間を付けて、このステートマシンによる処理のために投稿します。遅延イベントに関連付けられた識別子を返します。イベントを投稿できなかった場合は-1を返します。

この関数は即座に返ります。遅延時間が経過すると、イベントは処理のためにステートマシンのイベントキューに追加されます。ステートマシンはイベントの所有権を取得し、処理が完了するとそのイベントを削除します。

イベントを投稿できるのは、ステートマシンが実行中の場合のみです。

これはオーバーロードされた関数です。

注: この関数はスレッドセーフです。

cancelDelayedEvent() およびpostEvent()も参照してください 。

void QStateMachine::postEvent(QEvent *event, QStateMachine::EventPriority priority = NormalPriority)

指定されたpriority のevent を、このステートマシンによる処理のために投稿します。

この関数は即座に返ります。イベントはステートマシンのイベントキューに追加されます。イベントは投稿された順序で処理されます。ステートマシンはイベントの所有権を取得し、処理が完了するとそのイベントを削除します。

イベントを投稿できるのは、ステートマシンが実行中か、起動中の場合に限られます。

注: この関数はスレッドセーフです。

関連項目: postDelayedEvent()。

void QStateMachine::removeDefaultAnimation(QAbstractAnimation *animation)

デフォルトのアニメーション一覧から「animation 」を削除します。

void QStateMachine::removeState(QAbstractState *state)

指定されたstate をこのステートマシンから削除します。ステートマシンは、そのステートの所有権を解放します。

addState()も参照してください 。

[signal] void QStateMachine::runningChanged(bool running)

このシグナルは、running プロパティが引数として `running ` を指定して変更されたときに発生します。

注: プロパティ `running` に対する通知 シグナルです。

「QStateMachine::running」も参照してください 。

void QStateMachine::setAnimated(bool enabled)

このステートマシンにおいて、アニメーションがenabled であるかどうかを設定します。

注: プロパティ `animated`のセッター 関数です。

「isAnimated()」も参照してください 。

void QStateMachine::setGlobalRestorePolicy(QState::RestorePolicy restorePolicy)

ステートマシンの復元ポリシーを「restorePolicy 」に設定します。デフォルトの復元ポリシーは「QState::DontRestoreProperties 」です。

注: プロパティ `globalRestorePolicy`のセッター 関数です。

関連項目: globalRestorePolicy()。

[slot] void QStateMachine::start()

このステートマシンを起動します。マシンは設定をリセットし、初期状態に移行します。最終的なトップレベル状態(QFinalState )に入ると、マシンはfinished()シグナルを発行します。

注: QCoreApplication::exec() やQApplication::exec() で開始されたメインアプリケーションのイベントループなど、実行中のイベントループがないと、ステートマシンは 動作しません。

関連項目: started()、finished()、stop()、initialState()、およびsetRunning()。

[private signal] void QStateMachine::started()

このシグナルは、ステートマシンが初期状態(QStateMachine::initialState)に入ったときに発せられます。

注:これは プライベートシグナルです。シグナル接続で使用することはできますが、ユーザーが発行することはできません。

関連項目: QStateMachine::finished() およびQStateMachine::start()。

[slot] void QStateMachine::stop()

このステートマシンを停止します。ステートマシンはイベントの処理を停止し、その後、stopped() シグナルを発生させます。

stopped()、start()、およびsetRunning()も参照してください 。

[private signal] void QStateMachine::stopped()

このシグナルは、ステートマシンが停止したときに発信されます。

注:これは プライベートなシグナルです。シグナル接続では使用できますが、ユーザーが発行することはできません。

関連項目: QStateMachine::stop() およびQStateMachine::finished()。

© 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.