我正在尝试构建一个系统,该系统由主状态机编排,并针对正在执行的任务具有不同的子状态机。作为一个长期使用 Qt 的用户,我查看了 Qt 5.8 中新的 SCXML 实现。但是我无法弄清楚如何使用 5.8 提供的 API 来正确实现子状态机。
我的想法是使用一个主状态机,然后在主状态机的状态下调用特定的子状态机。在调用子状态机工作时,我无法弄清楚在顶级状态机对象发出后如何访问它们,invokedServicesChanged(..)
我可以访问指向 QScxmlInvokableService
但不能访问相关状态机的指针。
此外,顶级状态机对象仅从顶部公开状态和事件,而不是从调用的状态机公开。例如 topLevelStateMachine->activeStateNames()
只列出顶级状态。
查看 Qt 的源代码,我看到它QScxmlInvokableService
实际上是一个基类,QScxmlScxmlService
其中包含一个指向相关状态机的指针。不幸的是,正如名称所示,它QScxmlScxmlService
被定义qscxmlinvokableservice_p.h
为私有。_p
那么我应该如何使用公共 SCXML API?我错过了什么吗?IIRC SCXML 支持是 5.7 中的技术预览,但现在作为正常分布的一部分包含在 5.8 中。