PySide6.QtScxml.QScxmlCppDataModel¶
- class QScxmlCppDataModel¶
QScxmlCppDataModel类是用于 Qt SCXML 状态机的 C++ 数据模型。更多…概要¶
方法¶
def
__init__()def
inState()def
scxmlEvent()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
C++ 数据模型用于 SCXML,允许您为 expr 属性和
使用是通过
元素的datamodel属性:<scxml datamodel="cplusplus:TheDataModel:thedatamodel.h" ....>
datamodel 属性的格式为:
cplusplus:。因此,对于上面的示例,应该有一个文件 thedatamodel.h,其中包含: QScxmlCppDataModel的子类,至少包含以下内容:#include "qscxmlcppdatamodel.h" class TheDataModel: public QScxmlCppDataModel { \Q_OBJECT Q_SCXML_DATAMODEL };
Q_SCXML_DATAMODEL 必须出现在类定义的私有部分,例如在开括号之后,或在 Q_OBJECT 宏之后。此宏扩展为一些虚拟方法的声明,这些方法的实现由 Qt SCXML 编译器生成。
Qt SCXML 编译器将生成各种
evaluateTo方法,并将表达式和脚本转换为这些方法中的 lambda 表达式。例如:<scxml datamodel="cplusplus:TheDataModel:thedatamodel.h" xmlns="http://www.w3.org/2005/07/scxml" version="1.0" name="MediaPlayerStateMachine"> <state id="stopped"> <transition event="tap" cond="isValidMedia()" target="playing"/> </state> <state id="playing"> <onentry> <script> media = eventData().value(QStringLiteral("media")).toString(); </script> <send event="playbackStarted"> <param name="media" expr="media"/> </send> </onentry> </state> </scxml>
这将导致:
bool TheDataModel::evaluateToBool(QScxmlExecutableContent::EvaluatorId id, bool *ok) { // .... return [this]()->bool{ return isValidMedia(); }(); // .... } QVariant TheDataModel::evaluateToVariant(QScxmlExecutableContent::EvaluatorId id, bool *ok) { // .... return [this]()->QVariant{ return media; }(); // .... } void TheDataModel::evaluateToVoid(QScxmlExecutableContent::EvaluatorId id, bool *ok) { // .... [this]()->void{ media = eventData().value(QStringLiteral("media")).toString(); }(); // .... }
所以,你不仅限于调用函数。在
创建一个新的C++数据模型,其父对象为
parent。- inState(stateName)¶
- Parameters:
stateName – str
- Return type:
布尔
如果状态机处于由
stateName指定的状态,则返回true,否则返回false。- scxmlEvent()¶
- Return type:
保存当前由状态机正在处理的事件。
另请参阅SCXML规范 - 5.10 系统变量以了解
_event变量的描述。返回当前正在处理的事件。
另请参阅
setScxmlEvent()