为Qt SCXML创建自定义数据模型

4
我正在使用带有SCXML状态机的Qt。 我想通过Qt SCXML解释器和QScxmlStateMachine一起使用。 但是,Qt仅支持Null、EcmaScript和C++数据模型用于SCXML。我的状态机有一个自定义数据模型。
我想要子类化QScxmlDataModel以支持我的状态机。 我可以看到实现setup()hasScxmlProperty()setScxmlProperty()scxmlProperty()函数将允许从数据模型中设置/获取值。
然而,我不知道如何使表达式和其他特定于模型的项目(例如<transition cond="..."><script>...</script>)在我的自定义数据模型中得到正确评估。
我该如何创建一个自定义数据模型,使其能够执行更多操作而不仅仅是获取/设置属性?

Phrogz,你需要重写各种evaluate函数。 - Super-intelligent Shade
我非常想知道为什么这些函数被明确地排除在文档之外。 - Phrogz
Phrogz,我猜测API还没有最终确定。我已经将其发布为答案。 - Super-intelligent Shade
这是用于在服务器之间共享状态吗? - nurettin
@nurettin 不是。 - Phrogz
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可能会在未来发生变化。

它们现在已经被[包含](https://github.com/qt/qtscxml/blob/5.11/src/scxml/qscxmldatamodel.h#L78)在文档中。 - nurettin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接