为 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 将来可能会改变。
我在 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 将来可能会改变。