[Q学习]13 Qt状态机框架——简单的状态机
2016-06-21 11:32
495 查看
原创文章,可以转载,转载时请以超链接形式保留本文地址、作者信息和本声明。否则将追究法律责任。
状态机是面向对象中不可缺少的一部分,它可以用于描述对象(系统)如何响应对外部输入。状态机首先状态机定了对象(系统)能够到达的状态,然后定义状态迁移,即如何从一个状态转变到另一个状态。Qt中的状态机紧密地集成了Qt元对象系统,比如状态迁移可以通过信号触发,用户可以设置状态来设施QObject的属性,调用QObject的方法。Qt状态机框架是由事件系统驱动工作的。
Qt中使用状态机的步骤:
1 使用QstateMachine声明状态机A;
2 使用QState或者QState子类声明若干状态S1~Sn,将这些状态加入状态机A;
3 调用QState::addTransition设置S1到Sn各状态间的转换;
4 设置S1到Sn中某个状态为A的初始状态;
5 调用void QStateMachine::start()启动状态机。
先来看一个小例子:一个状态机有三个状态,分别为S1,S2,S3,状态机通过一个QPushButton对象控制,当按钮被按下时,状态机发生状态迁移。状态机初始态为S1。
Qt中声明状态机使用QstateMachine,声明状态QState。
下面的代码片段显示了创建上述状态机所需要代码。
第一步,创建状态机:
第三步,
4000
设置状态迁移:
第四步,设置初始状态;
第五步,启动状态机:
经过上述五步,我们建立一个简单的状态机系统。这里有一个说明要注意,Qt的状态机一个重要的特点,那就是异步执行,状态机状态迁移的过程将成为你的应用程序的事件循环的一部分。
状态机是面向对象中不可缺少的一部分,它可以用于描述对象(系统)如何响应对外部输入。状态机首先状态机定了对象(系统)能够到达的状态,然后定义状态迁移,即如何从一个状态转变到另一个状态。Qt中的状态机紧密地集成了Qt元对象系统,比如状态迁移可以通过信号触发,用户可以设置状态来设施QObject的属性,调用QObject的方法。Qt状态机框架是由事件系统驱动工作的。
Qt中使用状态机的步骤:
1 使用QstateMachine声明状态机A;
2 使用QState或者QState子类声明若干状态S1~Sn,将这些状态加入状态机A;
3 调用QState::addTransition设置S1到Sn各状态间的转换;
4 设置S1到Sn中某个状态为A的初始状态;
5 调用void QStateMachine::start()启动状态机。
先来看一个小例子:一个状态机有三个状态,分别为S1,S2,S3,状态机通过一个QPushButton对象控制,当按钮被按下时,状态机发生状态迁移。状态机初始态为S1。
Qt中声明状态机使用QstateMachine,声明状态QState。
下面的代码片段显示了创建上述状态机所需要代码。
第一步,创建状态机:
QStateMachine machine;
<p>第二步,创建状态并加入状态机</p>
QState *s1 = new QState(); QState *s2 = new QState(); QState *s3 = new QState(); machine.addState(s1); machine.addState(s2); machine.addState(s3);
第三步,
4000
设置状态迁移:
s1->addTransition(button, SIGNAL(clicked()), s2); s2->addTransition(button, SIGNAL(clicked()), s3); s3->addTransition(button, SIGNAL(clicked()), s1);
第四步,设置初始状态;
machine.setInitialState(s1);
第五步,启动状态机:
machine.start();
经过上述五步,我们建立一个简单的状态机系统。这里有一个说明要注意,Qt的状态机一个重要的特点,那就是异步执行,状态机状态迁移的过程将成为你的应用程序的事件循环的一部分。
相关文章推荐
- QT学习 第一章:基本对话框
- 使用Shiboken为C++和Qt库创建Python绑定
- Qt 5.6更新至RC版,最终版本近在咫尺
- Qt定时器和随机数详解
- Qt实现图片移动实例(图文教程)
- Qt for Android开发实例教程
- QModelIndex/Role/Model介紹<二>
- Qt Model/View/Delegate浅谈 - QAbstractListModel
- Qt Model/View/Delegate浅谈 - roleNames()
- QT历程(一):与CryptoJs对应的AES加密
- 基于PyQt5的快速开发框架QFramer
- OSX下安装PyQt
- ok6410开发板移植DirectFB手记
- 【笔记】给Qt内嵌一个Chrome吧
- 【算法】最短路径之A*搜索
- qt入门必备
- 在 Qt4 中使用 C++11
- Hello Word ~ v0.2.2 背单词软件发布 -- By WHYPRO
- ubuntu下opencv和qt的安装配置
- linux下opengl的安装(with qt)