PySide6.QtScxml.QScxmlCppDataModel

class QScxmlCppDataModel

QScxmlCppDataModel 类是用于 Qt SCXML 状态机的 C++ 数据模型。更多

PySide6.QtScxml.QScxmlCppDataModel 的继承图

概要

方法

注意

本文档可能包含从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(&quot;media&quot;)).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(); }();
    // ....
}

所以,你不仅限于调用函数。在

__init__([parent=None])
Parameters:

父对象QObject

创建一个新的C++数据模型,其父对象为parent

inState(stateName)
Parameters:

stateName – str

Return type:

布尔

如果状态机处于由stateName指定的状态,则返回true,否则返回false

scxmlEvent()
Return type:

QScxmlEvent

保存当前由状态机正在处理的事件。

另请参阅SCXML规范 - 5.10 系统变量以了解_event变量的描述。

返回当前正在处理的事件。

另请参阅

setScxmlEvent()