4

我将 Qt 与SCXML 状态机一起使用。我想通过QScxmlStateMachine. 但是,Qt 仅支持 SCXML 的 Null、EcmaScript 和 C++ 数据模型。我的状态机有一个自定义数据模型。

我想子类化QScxmlDataModel以支持我的状态机。我可以看到实现setup()hasScxmlProperty()setScxmlProperty()scxmlProperty()函数将如何允许从数据模型中设置/获取值。

但是,我不知道如何在我的自定义数据模型中正确评估表达式和其他特定于模型的项(例如 with<transition cond="...">或)。<script>...</script>

我怎样才能制作一个自定义数据模型,它知道如何做的不仅仅是获取/设置属性?

4

1 回答 1

4

您将需要覆盖的各种评估功能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;

它们都已从文档中排除,但您可以在此处查看它们。

我猜这是因为 Qt SCXML 模块是作为技术预览发布的,并且 API 将来可能会发生变化。

于 2016-04-20T14:35:59.983 回答