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

Creating a custom data model for Qt SCXML

我在 SCXML state machine. I want to use the native Qt SCXML interpreter via QScxmlStateMachine 中使用 Qt。但是,Qt 仅支持 SCXML 的 Null、EcmaScript 和 C++ 数据模型。我的状态机有一个自定义数据模型。

我想继承 QScxmlDataModel 以支持我的状态机。我可以看到如何实现 setup()hasScxmlProperty()setScxmlProperty()scxmlProperty() 函数将允许来自数据模型的 setting/getting 个值。

但是,我不知道如何才能使 expressions 和其他特定于模型的项目(例如 <transition cond="..."><script>...</script>)在我的自定义数据模型。

我如何制作一个自定义数据模型,它不仅知道如何处理 get/set 属性?

您将需要覆盖 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 将来可能会改变。