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 |
パブリック・スロット
シグナル
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 標準では規定されておらず、未定義の動作につながります。
QScxmlDataModel 、QScxmlNullDataModel 、QScxmlCppDataModelも参照して ください。
[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
すべてのアクティブな状態の状態名のリストを取得する。
状態がアクティブであるとき、定義上、その親状態はすべてアクティブである。compress がtrue
(デフォルト) の場合、親状態はフィルタリングされ、リーフ状態のみが返されます。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)
真偽値の引数を受け取り、その引数が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 を参照してください。
©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。