QtScxml学习笔记-数据模型的理解

dataModel

状态机的数据模型,决定状态机可以配置什么样的数据,可以使用哪些与数据有关的表达式和元素。

数据模型提供了状态机存储、读取和修改内部数据集的能力。特定的数据模型定义了一组表达式,表达式用于引用到数据模型的位置、计算值或给数据模型赋值,也可产生布尔条件。另外,数据集也包含了一组系统变量,这些系统变量由处理器自动持有。

<datamodel>
	<data id="mydata"/>
</datamodel>

标准附录描述了二种数据模型:

  • 空数据模型

  • 脚本数据模型

Qt定义了 一种数据模型:

  • c++数据模型

空数据模型

空数据模型只支持in(id)条件判断,确定是否处理某种状态,其他操作都是无效的,包括系统变量也是无法访问的.

脚本数据模型

ecmascript数据模型是在状态里按ecmascript的方式定义数据元素,并使用ecmascript脚本实现scritp\cond\expr等功能.

c++数据模型

这种数据模型是直接使用自定义的一个c++类,并在状态机初始化时使用外部的对象。在状态机中脚本或表达式里就可以直接写c++代码来直接访问c++对象。c++数据模型只能使用预编译的模式,不能动态加载,这里因为只有对scxml文件预编译才能把scxml文件中的c++代码转换为实际源文件中的生成c++代码。

看一下mediaplayer-qml-cppdatamodel示例。

c++模型声明

在状态机中声明c++数据类型,指定类名和声明文件

<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" binding="early" name="MediaPlayerStateMachine" datamodel="cplusplus:TheDataModel:thedatamodel.h" qt:editorversion="4.8.2" xmlns:qt="http://www.qt.io/2015/02/scxml-ext" initial="stopped">

其中datamodel="cplusplus:TheDataModel:thedatamodel.h"是数据类型的定义部分。

首先必须自定义一个类,这个类从QScxmlCppDataModel继承,并加上Q_OBJECT和一个特殊的宏Q_SCXML_DATAMODEL,并实现自己的其他自定义部分。

自定义c++模型类

文件thedatamodel.h:

#ifndef THEDATAMODEL_H
#define THEDATAMODEL_H

#include "qscxmlcppdatamodel.h"

class TheDataModel: public QScxmlCppDataModel
{
   
    Q_OBJECT
    Q_SCXML_DATAMODEL

private:
    bool isValidMedia() const;
    QVariantMap eventData() const;

    QString media;
};

#endif // THEDATAMODEL_H</
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值