加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[Qt入门篇]13 Qt状态机框架——简单的状态机

(2016-04-19 21:47:33)
标签:

statemachine

简单的状态机例程

qt

作者:taohe_qt 时间:2016/4/19

原创文章,可以转载,转载时请以超链接形式保留本文地址、作者信息和本声明。否则将追究法律责任。

状态机是面向对象中不可缺少的一部分,它可以用于描述对象(系统)如何响应对外部输入。状态机首先状态机定了对象(系统)能够到达的状态,然后定义状态迁移,即如何从一个状态转变到另一个状态。Qt中的状态机紧密地集成了Qt元对象系统,比如状态迁移可以通过信号触发,用户可以设置状态来设施QObject的属性,调用QObject的方法。Qt状态机框架是由事件系统驱动工作的。

Qt中使用状态机的步骤:

1 使用QstateMachine声明状态机A

2 使用QState或者QState子类声明若干状态S1~Sn,将这些状态加入状态机A

3 调用QState::addTransition设置S1Sn各状态间的转换;

4 设置S1Sn中某个状态为A的初始状态;

5 调用void QStateMachine::start()启动状态机。

先来看一个小例子:一个状态机有三个状态,分别为S1S2S3,状态机通过一个QPushButton对象控制,当按钮被按下时,状态机发生状态迁移。状态机初始态为S1

http://s6/mw690/003AhWFvzy712xXUXC5f5&690Qt状态机框架——简单的状态机" />

Qt中声明状态机使用QstateMachine,声明状态QState

下面的代码片段显示了创建上述状态机所需要代码。

第一步,创建状态机:

QStateMachine machine;

第二步,创建状态并加入状态机

QState *s1 = new QState();

QState *s2 = new QState();

QState *s3 = new QState();

machine.addState(s1);

machine.addState(s2);

machine.addState(s3);

第三步,设置状态迁移:

s1->addTransition(button, SIGNAL(clicked()), s2);

s2->addTransition(button, SIGNAL(clicked()), s3);

s3->addTransition(button, SIGNAL(clicked()), s1);

第四步,设置初始状态;

machine.setInitialState(s1);

第五步,启动状态机:

machine.start();

 

经过上述五步,我们建立一个简单的状态机系统。这里有一个说明要注意,Qt的状态机一个重要的特点,那就是异步执行,状态机状态迁移的过程将成为你的应用程序的事件循环的一部分。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有