このページでは

QScxmlStateMachine Class

QScxmlStateMachine クラスは、SCXML ファイルから作成されたステートマシンへのインターフェースを提供します。詳細...

ヘッダー: #include <QScxmlStateMachine>
CMake: find_package(Qt6 REQUIRED COMPONENTS Scxml)
target_link_libraries(mytarget PRIVATE Qt6::Scxml)
qmake: QT += scxml
QML内: ScxmlStateMachine
継承元: QObject

プロパティ

パブリック関数

QStringList activeStateNames(bool compress = true) const
QBindable<QScxmlDataModel *> bindableDataModel()
QBindable<QVariantMap> bindableInitialValues()
QBindable<bool> bindableInitialized() const
QBindable<QList<QScxmlInvokableService *>> bindableInvokedServices()
QBindable<QScxmlCompiler::Loader *> bindableLoader()
QBindable<QScxmlTableData *> bindableTableData()
void cancelDelayedEvent(const QString &sendId)
QMetaObject::Connection connectToEvent(const QString &scxmlEventSpec, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection connectToEvent(const QString &scxmlEventSpec, const QObject *context, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection connectToEvent(const QString &scxmlEventSpec, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection connectToState(const QString &scxmlStateName, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection connectToState(const QString &scxmlStateName, const QObject *context, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection connectToState(const QString &scxmlStateName, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
QScxmlDataModel *dataModel() const
QVariantMap initialValues()
QList<QScxmlInvokableService *> invokedServices() const
bool isActive(const QString &scxmlStateName) const
bool isDispatchableTarget(const QString &target) const
bool isInitialized() const
bool isInvoked() const
bool isRunning() const
QScxmlCompiler::Loader *loader() const
QString name() const
QList<QScxmlError> parseErrors() const
QString sessionId() const
void setDataModel(QScxmlDataModel *model)
void setInitialValues(const QVariantMap &initialValues)
void setLoader(QScxmlCompiler::Loader *loader)
void setRunning(bool running)
void setTableData(QScxmlTableData *tableData)
QStringList stateNames(bool compress = true) const
void submitEvent(QScxmlEvent *event)
void submitEvent(const QString &eventName)
void submitEvent(const QString &eventName, const QVariant &data)
QScxmlTableData *tableData() const

パブリックスロット

bool init()
void start()
void stop()

シグナル

void dataModelChanged(QScxmlDataModel *model)
void finished()
void initialValuesChanged(const QVariantMap &initialValues)
void initializedChanged(bool initialized)
void invokedServicesChanged(const QList<QScxmlInvokableService *> &invokedServices)
void loaderChanged(QScxmlCompiler::Loader *loader)
void log(const QString &label, const QString &msg)
void reachedStableState()
void runningChanged(bool running)
void tableDataChanged(QScxmlTableData *tableData)

静的パブリックメンバー

QScxmlStateMachine *fromData(QIODevice *data, const QString &fileName = QString())
QScxmlStateMachine *fromFile(const QString &fileName)
std::function<void (bool)> onEntry(Functor functor)
std::function<void (bool)> onEntry(const QObject *receiver, const char *method)
std::function<void (bool)> onEntry(const typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method)
std::function<void (bool)> onExit(Functor functor)
std::function<void (bool)> onExit(const QObject *receiver, const char *method)
std::function<void (bool)> onExit(const typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method)

protected関数

bool isActive(int stateIndex) const

詳細な説明

QScxmlStateMachine は、State Chart XML (SCXML) の実装です。

SCXML ファイルで定義されているすべての状態は、QScxmlStateMachine のプロパティとしてアクセス可能です。これらのプロパティはブール値であり、その状態がアクティブか非アクティブかを示します。

注: QScxmlStateMachineが 正しく動作するには、QEventLoop が必要です。イベントループは、イベントに対するdelay 属性を実装し、ネストされた(または親の)ステートマシンからイベントを受信した際に、ステートマシンの処理をスケジュールするために使用されます。

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

[bindable] dataModel : QScxmlDataModel*

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

このプロパティには、このステートマシンで使用されるデータモデルが格納されます。

SCXML データモデルについては、「SCXML 仕様 - 5 データモデルとデータ操作」で説明されています。サポートされているデータモデルの詳細については、「SCXML 準拠」を参照してください。

ステートマシンがinitialized された後にデータモデルを変更することは、SCXML標準では規定されておらず、未定義の挙動を引き起こします。

アクセス関数:

QScxmlDataModel *dataModel() const
void setDataModel(QScxmlDataModel *model)

通知シグナル:

void dataModelChanged(QScxmlDataModel *model)

関連項目: QScxmlDataModel 、QScxmlNullDataModel 、およびQScxmlCppDataModel 。

[bindable] initialValues : QVariantMap

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

このプロパティには、データモデルの設定に使用される初期値が格納されます。

アクセス関数:

QVariantMap initialValues()
void setInitialValues(const QVariantMap &initialValues)

通知シグナル:

void initialValuesChanged(const QVariantMap &initialValues)

関連項目: QScxmlStateMachine::init() およびQScxmlDataModel 。

[bindable read-only] initialized : bool

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

このプロパティは、ステートマシンが初期化されているかどうかを示します。

ステートマシンが初期化されている場合は `true `、そうでない場合は `false ` となります。

アクセス関数:

bool isInitialized() const

通知シグナル:

void initializedChanged(bool initialized)

QScxmlStateMachine::init() およびQScxmlDataModelも参照してください 。

[read-only] invoked : const bool

このプロパティは、ステートマシンが外側のステートマシンから呼び出されたかどうかを示します。

true ステートマシンが<invoke> 要素を使用してサービスとして起動された場合はfalse 、それ以外の場合はtrueとなります。

アクセス関数:

bool isInvoked() const

[bindable read-only] invokedServices : QList<QScxmlInvokableService*>

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

このプロパティには、メインのステートマシンから(場合によっては再帰的に)呼び出されたSCXMLサービスのリストが格納されます。

アクセス関数:

QList<QScxmlInvokableService *> invokedServices() const

通知シグナル:

void invokedServicesChanged(const QList<QScxmlInvokableService *> &invokedServices)

[bindable] loader : QScxmlCompiler::Loader*

注:この プロパティは、QProperty のバインディングをサポートしています。

このプロパティには、ステートマシンのURIを解決および読み込むために現在使用されているローダーが保持されます。

アクセス関数:

QScxmlCompiler::Loader *loader() const
void setLoader(QScxmlCompiler::Loader *loader)

Notifierシグナル:

void loaderChanged(QScxmlCompiler::Loader *loader)

[read-only] name : const QString

このプロパティには、<scxml> タグのname属性で設定されたステートマシンの名前が格納されます。

アクセス関数:

QString name() const

[read-only] parseErrors : const QList<QScxmlError>

このプロパティには、SCXML ファイルからステートマシンを作成する際に発生した解析エラーの一覧が格納されます。

アクセス関数:

QList<QScxmlError> parseErrors() const

running : bool

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

アクセス関数:

bool isRunning() const
void setRunning(bool running)

通知シグナル:

void runningChanged(bool running)

関連項目: ` start()`。

[read-only] sessionId : const QString

このプロパティには、現在のステートマシンのセッションIDが格納されます。

セッションIDは、親と子のステートマシン間のメッセージルーティングに使用されます。ステートマシンが<invoke> 要素によって起動された場合、そのステートマシンが送信するイベントのinvokeid フィールドには、セッションIDが設定されます。 ステートマシンは、イベントの発信元(<send> 要素のtargetまたはtargetexpr属性によって設定される)を使用して、適切な子ステートマシンにメッセージをディスパッチします。

アクセス関数:

QString sessionId() const

QScxmlEvent::invokeId()も参照してください 。

[bindable] tableData : QScxmlTableData*

注:この プロパティは、QProperty バインディングをサポートしています。

このプロパティには、SCXML ファイルから C++ を生成する際に使用されるテーブルデータが格納されます。

ステートマシンを実装するクラスは、このプロパティを使用して生成されたテーブルデータを割り当てます。ステートマシンは、テーブルデータの所有権を取得することはありません。

アクセス関数:

QScxmlTableData *tableData() const
void setTableData(QScxmlTableData *tableData)

通知シグナル:

void tableDataChanged(QScxmlTableData *tableData)

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

[invokable] QStringList QScxmlStateMachine::activeStateNames(bool compress = true) const

アクティブなすべての状態の名前の一覧を取得します。

状態がアクティブな場合、定義上、そのすべての親状態もアクティブとなります。compress がtrue (デフォルト)の場合、親状態は除外され、リーフ状態のみが返されます。false の場合、アクティブな状態の完全なリストが返されます。

注:この関数は 、メタオブジェクトシステムやQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

[invokable] void QScxmlStateMachine::cancelDelayedEvent(const QString &sendId)

指定されたsendId を持つ遅延イベントをキャンセルします。

注:この関数は 、メタオブジェクトシステムおよびQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

template <typename Functor> QMetaObject::Connection QScxmlStateMachine::connectToEvent(const QString &scxmlEventSpec, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)

template <typename Functor> QMetaObject::Connection QScxmlStateMachine::connectToEvent(const QString &scxmlEventSpec, const QObject *context, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)

scxmlEventSpec で指定されたイベントから、functor への、指定されたtype による接続を作成します。 は、ファンクタ、またはオプションのcontext オブジェクトのメンバ関数である場合があります。

レシーバーのfunctor は、QScxmlEvent をパラメータとして受け取る必要があります。

SCXML ドキュメントのイベント仕様とは対照的に、ここでの `scxmlEventSpec ` にはスペースを使用することはできません。異なるプレフィックスを持つ複数のイベントに接続するには、connectToEvent() を複数回呼び出す必要があります。

接続へのハンドルを返します。このハンドルは、後で接続を切断するために使用できます。

QMetaObject::Connection QScxmlStateMachine::connectToEvent(const QString &scxmlEventSpec, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)

scxmlEventSpec で指定されたイベントから、指定されたtype への接続を、receiver オブジェクト内のmethod に対して作成します。レシーバーのmethod は、QScxmlEvent をパラメータとして受け取ることができます。例:

void mySlot(const QScxmlEvent &event);

SCXMLドキュメント内のイベント仕様とは異なり、ここでのscxmlEventSpec にはスペースを含めることはできません。異なるプレフィックスを持つ複数のイベントに接続するには、connectToEvent()を複数回呼び出す必要があります。

接続へのハンドルを返します。このハンドルは、後で接続を切断するために使用できます。

template <typename Functor> QMetaObject::Connection QScxmlStateMachine::connectToState(const QString &scxmlStateName, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)

template <typename Functor> QMetaObject::Connection QScxmlStateMachine::connectToState(const QString &scxmlStateName, const QObject *context, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)

指定されたtype を、scxmlStateName で指定された状態からfunctor へと接続します。 は、ファンクター、あるいはオプションのcontext オブジェクトのメンバ関数である場合があります。

レシーバーのfunctor は、接続された状態がアクティブになったか非アクティブになったかを示すブール値の引数を受け取る必要があります。

接続へのハンドルを返します。このハンドルは、後で接続を切断するために使用できます。

QMetaObject::Connection QScxmlStateMachine::connectToState(const QString &scxmlStateName, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)

指定されたtype から、scxmlStateName で識別される状態を経由して、receiver オブジェクト内のmethod への接続を作成します。レシーバーのmethod は、接続された状態がアクティブになったか非アクティブになったかを示すブール値の引数を受け取ることができます。例:

void mySlot(bool active);

接続へのハンドルを返します。このハンドルは、後で接続を切断するために使用できます。

QScxmlDataModel *QScxmlStateMachine::dataModel() const

ステートマシンで使用されているデータモデルを返します。

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

関連項目: setDataModel()。

[signal] void QScxmlStateMachine::finished()

このシグナルは、ステートマシンが最上位の最終状態に達したときに発信されます。

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

[static] QScxmlStateMachine *QScxmlStateMachine::fromData(QIODevice *data, const QString &fileName = QString())

data で指定されたQIODevice から読み込んで、ステートマシンを作成します。

このメソッドは常にステートマシンを返します。SCXMLファイル(fileName )の読み込み中にエラーが発生した場合、ステートマシンを起動することはできません。エラーは、parseErrors() メソッドを呼び出すことで取得できます。

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

[static] QScxmlStateMachine *QScxmlStateMachine::fromFile(const QString &fileName)

fileName で指定されたSCXMLファイルからステートマシンを作成します。

このメソッドは常にステートマシンを返します。SCXML ファイルの読み取り中にエラーが発生した場合、ステートマシンを起動することはできません。エラーは、parseErrors() メソッドを呼び出すことで取得できます。

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

[slot] bool QScxmlStateMachine::init()

ステートマシンを初期化します。

ステートマシンの初期化は、QScxmlDataModel::setup()の呼び出し、<data> 要素の初期値の設定、および<scxml> タグ内の<script> タグの実行で構成されます。初期データ値はinitialValues プロパティから取得されます。

解析エラーが発生した場合、または初期化手順のいずれかが失敗した場合は、false を返します。それ以外の場合は、true を返します。

[invokable] bool QScxmlStateMachine::isActive(const QString &scxmlStateName) const

scxmlStateName で指定された状態がアクティブな場合は `true ` を返し、それ以外の場合は `false ` を返します。

注:この関数は 、メタオブジェクトシステムおよび QML から呼び出すことができます。Q_INVOKABLE を参照してください。

[protected] bool QScxmlStateMachine::isActive(int stateIndex) const

IDがstateIndex の状態がアクティブな場合、true を返します。

このメソッドは、SCXML ステートマシンのコンパイル済み表現に対するインターフェースの一部です。これは内部的に、および SCXML ドキュメントからコンパイルされたステートマシンでのみ使用されるべきです。

[invokable] bool QScxmlStateMachine::isDispatchableTarget(const QString &target) const

このステートマシンによって、target 宛てのメッセージを配信できる場合、true を返します。

有効なターゲットは次のとおりです:

  • #_parent 現在のステートマシンが<invoke>
  • #_internal 現在のステートマシン
  • #_scxml_sessionidの場合、sessionid は現在のステートマシンのセッション ID です
  • #_servicename、ここでservicename は、このステートマシンによって<invoke> で起動されたサービスの ID または名前です

注:この関数は 、メタオブジェクトシステムを介して、およびQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

bool QScxmlStateMachine::isRunning() const

ステートマシンが実行中の場合は `true ` を返し、それ以外の場合は `false ` を返します。

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

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

[signal] void QScxmlStateMachine::log(const QString &label, const QString &msg)

このシグナルは、SCXML内で<log> タグが使用されている場合に発生します。label は、<log> タグのlabel属性の値です。msg は、<log> タグのexpr属性の評価結果の値です。expr属性が存在しない場合は、空文字列が返されます。

[static] template <typename Functor> std::function<void (bool)> QScxmlStateMachine::onEntry(Functor functor)

ブール値の引数を受け取り、その引数がtrue の場合に、指定されたfunctor を呼び出すファンクタを返します。指定されたfunctor は、いかなる引数も受け入れてはなりません。

これは、状態に入ったときにのみ実行されるべきconnectToState()のハンドラをラップするのに役立ちます。

[static] std::function<void (bool)> QScxmlStateMachine::onEntry(const QObject *receiver, const char *method)

ブール値の引数を受け取り、その引数がtrue であり、かつreceiver がまだ削除されていない場合、QMetaObject::invokeMethod() を使用してreceiver 上の指定されたmethod を呼び出すファンクタを返します。

指定されたmethod は、いかなる引数も受け付けてはなりません。method は、SIGNAL() やSLOT() で囲まれていない、単純なメソッド名です。

これは、状態に入ったときにのみ実行されるべきconnectToState()のハンドラをラップするのに役立ちます。

[static] template <typename PointerToMemberFunction> std::function<void (bool)> QScxmlStateMachine::onEntry(const typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method)

ブール値の引数を受け取り、その引数がtrue であり、かつreceiver がまだ削除されていない場合に、receiver に対して指定されたmethod を呼び出すファンクタを返します。指定されたmethod は、いかなる引数も受け入れてはなりません。

これは、状態に入ったときにのみ実行されるべきconnectToState()のハンドラをラップするのに役立ちます。

[static] template <typename Functor> std::function<void (bool)> QScxmlStateMachine::onExit(Functor functor)

ブール値の引数を受け取り、その引数がfalse の場合に指定されたfunctor を呼び出すファンクタを返します。指定されたfunctor は、いかなる引数も受け入れてはなりません。

これは、状態を離れるときにのみ実行されるべきconnectToState()のハンドラをラップするのに役立ちます。

[static] std::function<void (bool)> QScxmlStateMachine::onExit(const QObject *receiver, const char *method)

ブール値の引数を受け取り、その引数がfalse であり、かつreceiver がまだ削除されていない場合、QMetaObject::invokeMethod() を使用してreceiver 上の指定されたmethod を呼び出すファンクタを返します。

指定されたmethod は、いかなる引数も受け入れてはなりません。method は、SIGNAL(...)やSLOT(...)で囲まれていない、単純なメソッド名です。

これは、状態を離れるときにのみ実行されるべきconnectToState() のハンドラをラップするのに役立ちます。

[static] template <typename PointerToMemberFunction> std::function<void (bool)> QScxmlStateMachine::onExit(const typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method)

ブール型の引数を受け取り、その引数がfalse の場合に、かつreceiver がまだ削除されていない場合に、receiver に対して指定されたmethod を呼び出すファンクタを返します。指定されたmethod は、いかなる引数も受け入れてはなりません。

これは、状態から離れるときにのみ実行されるべきconnectToState()のハンドラをラップするのに役立ちます。

[signal] void QScxmlStateMachine::reachedStableState()

このシグナルは、マクロステップの終了時にイベントキューが空になった場合、または最終状態に到達した場合に発信されます。

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

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

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

void QScxmlStateMachine::setDataModel(QScxmlDataModel *model)

このステートマシンのデータモデルを「model 」に設定します。ステートマシンとモデルは1対1の関係にあります。モデルを一度設定すると、それ以降は変更できません。このメソッドを使用してモデルを設定しようとしても、それ以降は無視されます。

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

関連項目: dataModel()。

void QScxmlStateMachine::setRunning(bool running)

running がtrue の場合、ステートマシンを開始し、それ以外の場合は停止します。

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

関連項目: start()、stop()、isRunning()、およびrunningChanged()も参照してください 。

[slot] void QScxmlStateMachine::start()

このステートマシンを起動します。最終的なトップレベルの状態に入ると、このマシンは `finished()` シグナルを発信します。

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

注: stop() の後に start()を呼び出しても 、その設定は完全にはリセットされないため、この操作は絶対に行わないことを強く推奨します。

注: 完成済みのマシンを起動すると 、警告が表示されます。

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

[invokable] QStringList QScxmlStateMachine::stateNames(bool compress = true) const

すべての州の州名のリストを取得します。

compress がtrue (デフォルト)の場合、子状態を含む状態は除外され、リーフ状態のみが返されます。false の場合、すべての状態の完全なリストが返されます。

返されるリストには、ネストされたステートマシンに含まれるステートは含まれません。

注: リスト内の状態名の順序は 、SCXMLドキュメント内で状態が出現した順序となります。

注:この関数は 、メタオブジェクトシステムを介して、また QML から呼び出すことができます。Q_INVOKABLE を参照してください。

[slot] void QScxmlStateMachine::stop()

このステートマシンを停止します。マシンはこれ以降、いかなる状態遷移も実行しなくなります。そのrunning プロパティはfalse に設定されます。

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

[invokable] void QScxmlStateMachine::submitEvent(QScxmlEvent *event)

SCXMLイベント「event 」を、そのイベントの優先度に応じて、内部または外部のイベントキューに送信します。

遅延が設定されている場合、タイムアウトが経過した後にイベントが配信キューに入れられます。ステートマシンは `event ` の所有権を取得し、処理後にこれを削除します。

注:この関数は 、メタオブジェクトシステム経由およびQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

[invokable] void QScxmlStateMachine::submitEvent(const QString &eventName)

指定されたeventName を名前として、外部イベントを作成・送信するためのユーティリティメソッドです。

注:この関数は 、メタオブジェクトシステムおよびQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

[invokable] void QScxmlStateMachine::submitEvent(const QString &eventName, const QVariant &data)

指定されたeventName を名前、data をペイロードデータとして、外部イベントを作成・送信するためのユーティリティメソッドです。

注:この関数は 、メタオブジェクトシステムおよびQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

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