Qt 范例阅读: QStateMachine状态机框架 和 SCXML 引擎简单记录(方便后续有需求能想到这两个东西)

本文主要是介绍Qt 范例阅读: QStateMachine状态机框架 和 SCXML 引擎简单记录(方便后续有需求能想到这两个东西),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、QStateMachine 简单应用: 实现按钮的文本切换

    QStateMachine machine; //定义状态机(头文件定义)QState *off = new QState(); //添加off 状态off->assignProperty(ui->pushButton_2, "text", "Off"); //绑定该状态到按钮的 text 属性上off->setObjectName("off");QState *on = new QState(); //添加off 状态on->setObjectName("on");on->assignProperty(ui->pushButton_2, "text", "On"); //绑定该状态到按钮的 text 属性上off->addTransition(ui->pushButton_2, &QAbstractButton::clicked, on); //添加转换条件on->addTransition(ui->pushButton_2, &QAbstractButton::clicked, off);//绑定状态 进入、退出 信号QObject::connect(on, &QState::entered, this, [=](){qDebug() << "QState on enter";});QObject::connect(off, &QState::exited, this, [=](){qDebug() << "QState off exited";});//添加状态到状态机machine.addState(off);machine.addState(on);machine.setInitialState(off); //设置初始状态machine.start(); //运行状态机

二、SCXML: 一种 状态机描述 XML 格式文件 ;qt 可以之间通过 图形界面拖拽的方式生成,比较方便。具体案例 qt 搜索 scxml 即可。

        案例:交通灯:trafficlight-widgets-dynamic

        scxml 文件含义:定义了两个大的状态 working 、broken

        working 状态下子状态有:red 、green、yellow(子状态:redGoingGreen、greenGoingRed)

        broken 状态下子状态有: blinking 、 unblinking

        整个文件已经定义好了各个状态之间的切换条件、所以启动状态机后状态机会自动运转

属性界面:red : 标识状态 ;onentry 标识 进入red 状态要执行的行为 是 send startGoingGreen 事件。下面delay 3s 应该是延时3s 才发送事件

        main.cpp

    //读取scxml 文件内容,创建状态机QScxmlStateMachine *machine = QScxmlStateMachine::fromFile(QStringLiteral(":statemachine.scxml"));if (!machine->parseErrors().isEmpty()) {QTextStream errs(stderr, QIODevice::WriteOnly);const auto errors = machine->parseErrors();for (const QScxmlError &error : errors) {errs << error.toString();}return -1;}TrafficLight widget(machine); //和状态机绑定的界面widget.show();machine->setParent(&widget);machine->start(); //启动状态机

        TrafficLight.cpp

    //将状态机的状态 和 界面相关的处理函数链接machine->connectToState(QStringLiteral("red"),widget->redLight(), &LightWidget::switchLight);machine->connectToState(QStringLiteral("redGoingGreen"),widget->redLight(), &LightWidget::switchLight);machine->connectToState(QStringLiteral("yellow"),widget->yellowLight(), &LightWidget::switchLight);machine->connectToState(QStringLiteral("blinking"),widget->yellowLight(), &LightWidget::switchLight);machine->connectToState(QStringLiteral("green"),widget->greenLight(), &LightWidget::switchLight);//状态机的切换逻辑是在scxml 中定义好了的

这篇关于Qt 范例阅读: QStateMachine状态机框架 和 SCXML 引擎简单记录(方便后续有需求能想到这两个东西)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/673690

相关文章

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要