QScxmlStateMachine Class

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

Header: #include <QScxmlStateMachine>
CMake: find_package(Qt6 REQUIRED COMPONENTS Scxml)
target_link_libraries(mytarget PRIVATE Qt6::Scxml)
qmake: QT += scxml
In QML: ScxmlStateMachine
Inherits: 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 仕様 - 5 データモデルとデータ操作 を参照してください。サポートされるデータモデルについての詳細は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)

boolean 引数を受け取り、その引数がtrue の場合、与えられたfunctor を呼び出すファンクタを返します。与えられたfunctor は引数を受け入れてはいけません。

これは、状態が入力されたときにのみ実行されるべきconnectToState() のハンドラをラップするのに便利である。

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

receiver true receiver 与えられたmethod を呼び出すファンクタを返す。このファンクタは、ブーリアン引数を受 け取り、その引数がQMetaObject::invokeMethod()の場合、 ()を使用する。

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 がまだ削除されていない場合、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)

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

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 を参照してください。

©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。