Qt状态机框架的一个典型应用

       本文通过一个典型的状态机模型,来说明如何在Qt中使用状态机.

       该模型有两个状态S1和S2,其中S1又有两个子状态S11和S12,S1为状态机的初始状态,S11为S1的初始状态.为了模拟一些嵌入式开发中的需要,在s12中启动了一个定时器,在S2中建立了一个模式对话框.

       对于一个确定的状态,其进入和退出时会分别发射entered()信号和exited()信号,你可以通过connect函数将该信号连接到自定义的状态入口和出口函数,而在进入一个确定的状态时,一般在其入口函数处初试化其状态.当从一个状态迁移到另一个状态时,它会先退出自身,然后退出其父状态(如果有父的话),然后在进入另一个状态.

       关于状态迁移,子状态会自动继承父状态的transition.因此,你不需要为每个子状态(如s11和s12)都添加一个transition,而只需要为它们的父状态添加一个transition就可以了.

       需要明确一点,在一个子状态中,不建议使用阻塞函数(比如模式对话框),因为你一旦引入阻塞,将会打断诸如定时器等发出的信号,将使状态机无法响应,当然,特殊的情况例外.

       好了,看代码

      

MyStateMachine::MyStateMachine(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::MyStateMachine)
{
    ui->setupUi(this);

    timer = new QTimer;

    machine = new QStateMachine();
    s1 =new QState();
    s11 = new QState(s1);
    s12 = new QStat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值