私はシステムを構築しようとしています。システムは、メインステートマシンによって編成され、実行中のタスクに対して異なるサブステートマシンを持っています。長年のQtユーザーだったので、私はQt 5.8で新しいSCXML実装を検討しました。しかし、サブステートマシンを適切に実装するために5.8で提供されているAPIを使用する方法を理解することはできません。Qt 5.8サブステートマシンでSCXMLフレームワークを使用するには?
私の考えは、メイン・ステート・マシンを使用して、メインステートマシンの状態で特定のサブステートマシンを起動することです。サブステートマシンを呼び出すと、トップステートのマシンオブジェクトが発行された後にアクセスする方法を理解できませんでしたinvokedServicesChanged(..)
QScxmlInvokableService
へのポインタにアクセスできますが、関連するステートマシンにはアクセスできません。
もトップレベルのステートマシンオブジェクトのみを上からではなく呼び出されたステートマシンからの状態およびイベントを公開します。たとえば、topLevelStateMachine->activeStateNames()
はトップの状態のみを表示します。
Qtのソースコードを見ると、QScxmlInvokableService
は、実際には関連するステートマシンへのポインタを含むQScxmlScxmlService
の基本クラスです。残念ながら、QScxmlScxmlService
は、qscxmlinvokableservice_p.h
で定義されています。これは、その名前に_p
と表示されます。では、公開SCXML APIをどのように使用するのですか?何か不足していますか? IIRC SCXMLサポートは、5.7の技術プレビューでしたが、正規分布の一部として5.8に含まれています。
これはAPIの監督です。自由に 'QT + = scxml_private'をプロジェクトに追加し、実装の詳細を使って必要な作業を行います。 Qtモジュールは全く新しく、はい、それを有用にするために必要なビットがほとんどありません。 –
"サブステートマシン"と言うときは、 '.scxml'ステートマシンを別にしているか、[複合ステート](https://www.w3.org/TR/scxml/#N10192)を参照していますか?前者なら、なぜ後者ではないでしょうか? – Phrogz
ステートマシンは別です。私は、1つのXMLファイルで大きなステートマシンを使用することは良い考えではないと考えていますが、理論的には複合状態で解決することもできます。 SCXMLとQtを使用して、多くのサブ状態を持つ大きな状態図をどのように整理しますか? – Nils