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)

保護された関数

bool isActive(int stateIndex) const

詳細説明

QScxmlStateMachine はステートチャート XML (SCXML) の実装です。

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

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

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

[bindable] dataModel : QScxmlDataModel*

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

このプロパティは、このステートマシンで使用するデータモデルを保持します。

SCXML のデータモデルについてはSCXML Specification - 5 Data Model and Data Manipulation を参照してください。サポートされるデータモデルについての詳細はSCXML Compliance を参照してください。

ステートマシンがinitialized になっているときにデータモデルを変更することは SCXML 標準では規定されておらず、未定義の動作につながります。

QScxmlDataModelQScxmlNullDataModelQScxmlCppDataModelも参照して ください。

[bindable] initialValues : QVariantMap

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

このプロパティは、データモデルの設定に使用する初期値を保持します。

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

[bindable read-only] initialized : bool

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

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

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

QScxmlStateMachine::init() およびQScxmlDataModelも参照のこと

[read-only] invoked : const bool

このプロパティは、ステートマシンが外部のステートマシンから起動されたかどうかを保持する。

true ステートマシンが、 要素を持つサービスとして開始された場合、 そうでない場合。<invoke> false

アクセス関数:

bool isInvoked() const

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

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

このプロパティは、メインステートマシンから呼び出された SCXML サービスのリストを保持します (再帰的な場合もあります)。

[bindable] loader : QScxmlCompiler::Loader*

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

このプロパティは、ステートマシンのURIを解決してロードするために現在使用されているローダーを保持します。

[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++ を生成するときに使用されるテーブル・データを保持します。

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

メンバ関数ドキュメント

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() を複数回呼び出す必要があります。

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

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)

scxmlStateName で指定された状態からfunctor への、与えられたtype の接続を作成する。 は、ファンクタまたはオプションのcontext オブジェクトのメンバ関数であることができる。

レシーバのfunctor は、接続された状態がアクティブになったか非アクティブになったかを示す boolean 引数を取らなければならない。

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

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

すべてのアクティブな状態の状態名のリストを取得する。

ある状態がアクティブであるとき、定義上、その親状態はすべてアクティブである。compresstrue (デフォルト) の場合、親状態はフィルタリングされ、リーフ状態のみが返されます。これがfalse の場合、アクティブな状態の完全なリストが返される。

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

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

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

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

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

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

void mySlot(const QScxmlEvent &event);

SCXML ドキュメントのイベント指定とは対照的に、scxmlEventSpec ではスペースは使用できません。異なる接頭辞を持つ複数のイベントに接続するには、 connectToEvent() を複数回呼び出す必要があります。

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

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

scxmlStateName で特定される状態からreceiver オブジェクトのmethod への、与えられたtype の接続を作成する。レシーバの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

IDstateIndex を持つ状態がアクティブであればtrue を返す。

このメソッドは SCXML ステートマシンのコンパイルされた表現のインターフェイスの一部です。SCXML ドキュメントからコンパイルされたステートマシンの内部でのみ使用する必要があります。

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

このステートマシンがtarget へのメッセージをディスパッチできる場合、true を返す。

有効なターゲットは以下の通り:

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

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

bool QScxmlStateMachine::isRunning() const

ステートマシンが実行中であればtrue を、そうでなければfalse を返す。

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

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

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

<log> label は タグの<log> label属性の値です。 は タグのmsg <log> expr属性の値です。expr属性がない場合は、NULL文字列が返されます。

[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)

ブール値の引数を受け取り、その引数がtruereceiver がまだ削除されていない場合、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)

真偽値の引数を受け取り、その引数がtruereceiver がまだ削除されていない場合、与えられたmethodreceiver で呼び出すファンクタを返す。与えられた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)

ブール値の引数を受け入れ、与えられたmethodQMetaObject::invokeMethod() を使ってreceiver に呼び出すファンクタを返す。その引数がfalse で、receiver がまだ削除されていない場合。

method method は、SIGNAL(...)やSLOT(...)で囲まれていないプレーンなメソッド名である。

これは、connectToState ()のハンドラをラップするのに便利である。

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

真偽値の引数を受け取り、その引数がfalsereceiver がまだ削除されていない場合、与えられたmethodreceiver で呼び出すファンクタを返す。与えられた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)

runningtrue の場合はステートマシンを起動し、そうでない場合は停止する。

備考: プロパティ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

すべての状態の状態名のリストを取得する。

compresstrue (デフォルト) の場合、子状態を含む状態はフィルタリングされ、リーフ状態のみが返される。これが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 を参照してください。

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