2016-04-14 5 views
3

私はSCXML state machineでQtを使用しています。ネイティブQt SCXML通訳をQScxmlStateMachine経由で使いたいです。しかし、QtはSCXMLのNull、EcmaScript、およびC++データモデルのみをサポートしています。私のステートマシンはカスタムデータモデルを持っています。Qt SCXMLのカスタムデータモデルを作成する

サブマシンしてQScxmlDataModel私の状態マシンをサポートしたいと思います。 setup(),、setScxmlProperty()、およびscxmlProperty()関数を実装することによって、データモデルから値を設定/取得することが可能になることがわかります。

expressionsなどのモデル固有の項目(<transition cond="..."><script>...</script>など)は、カスタムデータモデルで正しく評価されるようにはできません。

プロパティを取得/設定する以外の方法を知っているカスタムデータモデルを作成するにはどうすればよいですか?あなたは様々なを上書きする必要があります

+0

Phrogz、さまざまな[評価](https://github.com/qtproject/qtscxml/blob/5.7/src/scxml/qscxmldatamodel.h#L79)関数をオーバーライドする必要があります。 –

+0

私はこれらの機能が明示的にドキュメントから除外されている理由を強く疑問視しています。 – Phrogz

+0

Phrogz、私の推測では、APIは最終的ではないということです。私は答えとして投稿しました。 –

答えて

3

QScxmlDataModelの機能を評価:

virtual QString evaluateToString(QScxmlExecutableContent::EvaluatorId id, bool *ok) = 0; 
virtual bool evaluateToBool(QScxmlExecutableContent::EvaluatorId id, bool *ok) = 0; 
virtual QVariant evaluateToVariant(QScxmlExecutableContent::EvaluatorId id, bool *ok) = 0; 
virtual void evaluateToVoid(QScxmlExecutableContent::EvaluatorId id, bool *ok) = 0; 
virtual void evaluateAssignment(QScxmlExecutableContent::EvaluatorId id, bool *ok) = 0; 
virtual void evaluateInitialization(QScxmlExecutableContent::EvaluatorId id, bool *ok) = 0; 
virtual bool evaluateForeach(QScxmlExecutableContent::EvaluatorId id, bool *ok, ForeachLoopBody *body) = 0; 

彼らはすべてのドキュメントから除外されていますが、あなたは彼らにhereを見ることができます。

私はこの理由はQt SCXMLモジュールがTechnology Previewとしてリリースされ、将来APIが変更される可能性があるためです。

+0

@Phrogz、ありがとう:) –

関連する問題