我使用Qt和SCXML state machine。我想通过Qt SCXML使用原生QScxmlStateMachine
解释器。但是,Qt仅支持SCXML的Null,EcmaScript和C ++数据模型。我的状态机有一个自定义数据模型。
我想继承QScxmlDataModel
来支持我的状态机。我可以看到实施setup()
,hasScxmlProperty()
,setScxmlProperty()
和scxmlProperty()
函数如何允许从数据模型中设置/获取值。
但是,我不知道如何制作它,以便expressions和其他特定于模特的项目 - 例如<transition cond="...">
或<script>...</script>
- 将在我的自定义数据模型。
如何创建一个自定义数据模型,知道如何做更多只是获取/设置属性?
答案 0 :(得分:4)
您需要覆盖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;
:
<tr>
它们都被排除在文档之外,但您可以看到它们sprintfc
。
我的猜测原因是Qt SCXML模块以here发布,API可能会在未来发生变化。