2 关联信号槽

Qt状态机有这样一个特性:进入某个状态时会触发QState::entered()信号,离开状态时触发QState::exited()信号,如此,我们使用槽函数关联这两个信号就可以做一些额外的操作了。还是之前的代码,增加两个槽函数,输出字符串:

声明如下:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QStateMachine>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();public slots:void OnExitStateS1(void);void OnEnterStateS2(void);private:Ui::MainWindow *ui;QStateMachine machine;
};#endif // MAINWINDOW_H

实现:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QState>
#include <QDebug>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);QState *s1 = new QState();QState *s2 = new QState();QState *s3 = new QState();machine.addState(s1);machine.addState(s2);machine.addState(s3);s1->addTransition(ui->button, SIGNAL(clicked()), s2);s2->addTransition(ui->button, SIGNAL(clicked()), s3);s3->addTransition(ui->button, SIGNAL(clicked()), s1);// 分配属性s1->assignProperty(ui->button, "text", "S1");s2->assignProperty(ui->button, "text", "S2");s3->assignProperty(ui->button, "text", "S3");connect(s1, SIGNAL(exited()), this, SLOT(OnExitStateS1()));connect(s2, SIGNAL(entered()), this, SLOT(OnEnterStateS2()));machine.setInitialState(s1);machine.start();}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::OnExitStateS1(void)
{qDebug() << "Exit s1";
}void MainWindow::OnEnterStateS2(void)
{qDebug() << "Enter s2";
}

运行之后,在离开S1进入S2的状态迁移中会输出两个字符串。

[Q学习]14 Qt状态机框架——进入和退出状态2相关推荐

  1. Qt状态机框架介绍(二)

    前言 上一篇博客中已经介绍了Qt状态机的基础概念和用法,文章在这里,接下来继续介绍Qt状态机的使用. 历史状态的保存和恢复 前一个示例中,我们通过一个按钮中断状态机,在此基础上,如果我们中断状态机过后 ...

  2. Qt状态机框架介绍(一)

    概述 状态机,简写为FSM(Finite State Machine),状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作.完成特定操作的控制中心 ...

  3. Qt状态机框架(01):The State Machine Framework【官翻】

    文章目录 一.前言 二.状态机框架中的类 三.简单的状态机示例 3.1 首先,我们创建状态机和状态: 3.2 然后,我们使用QState::addTransition()函数来创建转换: 3.3 然后 ...

  4. 嵌入式学习之QT学习---14 QT跨平台运行之把QT程序交叉编译到ARM开发板

    想要把qt工程放到开发板上运行,就需要用到交叉编译.由于qt是跨平台的,所以只需要换个编译器编译一下就可以. 以qt学习–计时器的例子为例,在移植之前还需要进行一个准备工作,在windows下运行的时 ...

  5. 如何保证Qt状态机的最佳性能

    如何保证Qt状态机的最佳性能 How to ensure the best Qt state machine performance 如果您使用Qt进行应用程序开发,并且使用状态机,那么很可能您正在使 ...

  6. 使用双重深度q学习发现非常规的厄运策略

    介绍 (Introduction) Over the last few articles, we've discussed and implemented deep Q-learning (DQN) ...

  7. 使用Qt动画框架设计角色的二维动画

    使用Qt动画框架设计角色的二维动画 Qt的动画框架是Qt4.6新添加的一个重要的特性,有了它,开发人员可以制作激动人心的动画界面,而不必局限于单调的固定窗口了,可以说,Qt动画框架是其它界面库少见的功 ...

  8. QT学习之状态机框架

    状态机框架 创建状态机

  9. Qt知识回顾(十)——图形视图、动画和状态机框架

      Qt提供了图形视图框架(Graphics View Framework).动画框架(The Animation Framework)和状态机框架(The State Machine Framewo ...

最新文章

  1. docker中部署redis主从模式
  2. 转 mvc项目中,解决引用jquery文件后智能提示失效的办法
  3. java dayofweek_Java DayOfWeek getDisplayName()用法及代碼示例
  4. 无关技术,关于香港对我的影响
  5. 如何在51cto博客中添加QQ链接
  6. 手机被锁在耳机模式了
  7. 2019年总结【跨越今天,更不平凡】
  8. mse均方误差计算公式_PCA的两种解读:方差最大与均方误差最小的推导
  9. 開博客了, 因為搞Delphi 開發的關於Delphi學習
  10. 初面蚂蚁金服,java商城项目经验简历
  11. 王阳明:一个人不开心的真正原因:智慧不够
  12. 程序员健身了6个月,瘦了 30 斤,怎么做到的?
  13. springboot Nexus Repository Maven仓库搭建及使用
  14. 如何在word中打带矩形的√
  15. Python判断闰年函数
  16. 华为发布21年财报 孟晚舟出席
  17. 一步步教你做“锅打灰太狼”
  18. 圣经不是一本书,而是一个图书馆,所以才这么难读
  19. 网络安全黑客攻击常见方式如何预防黑客攻击黑客思维
  20. python监控网页更新_【小白教程】Python3监控网页

热门文章

  1. OCaml文档(一) - 核心语言部分
  2. 【Interfacenavigation】修改通知徽章(42)
  3. JPA @Modifying注解 jpql语句更新以及删除
  4. 第五章 静态分析 Android 程序(四)(使用 JEB 进行静态分析)
  5. 三国志战略版:Daniel_S6再论五谋
  6. 【学习笔记】java中单引号和双引号有什么区别?
  7. 第66篇:顶级APT后门Sunburst通信流量全过程复盘分析(修正篇)
  8. ubuntu下qt插件qwt的使用
  9. python定义一个空数组_在NumPy中如何创建一个空的数组/矩阵?
  10. 详细讲解【拓展欧几里得】