Qt状态机场景模拟

来源:互联网 发布:o2o商城源码 编辑:程序博客网 时间:2024/06/05 20:26

Qt状态机场景模拟

    • Qt状态机场景模拟
      • 效果图
      • QState状态机创建红绿灯
      • 动画控制小车移动
      • 结尾

效果图

这里写图片描述

因录制问题,效果不是很好,这里截了部分状态图
1.
这里写图片描述
2.
这里写图片描述
3.
这里写图片描述

QState状态机创建红绿灯

    QState *createLightState(LightWidget *light, int duration, QState *parent = 0)    {        //状态添加        QState *lightState = new QState(parent);        //为状态添加一个定时器        QTimer *timer = new QTimer(lightState);        timer->setInterval(duration);        timer->setSingleShot(true);        QState *timing = new QState(lightState);        //状态开启时,灯亮        QObject::connect(timing, SIGNAL(entered()), light, SLOT(turnOn()));        //状态开启时,开始定时器        QObject::connect(timing, SIGNAL(entered()), timer, SLOT(start()));        //状态结束时,灯灭        QObject::connect(timing, SIGNAL(exited()), light, SLOT(turnOff()));        //状态结束时,发出一个结束信号(这里是为了告诉小车,绿灯状态下,小车过马路)        connect(lightState, &QState::finished, [this, light](){            emit signalCurLightColor(light->getLightColor());        });        //终止状态        QFinalState *done = new QFinalState(lightState);        //定时器结束时,结束状态        timing->addTransition(timer, SIGNAL(timeout()), done);        lightState->setInitialState(timing);        return lightState;    }
//创建一个状态机QStateMachine *machine = new QStateMachine(this);//红灯状态QState *redLight = createLightState(widget->redLight(), 1000);redLight->setObjectName("redLight");//黄灯状态        QState *yellowLight = createLightState(widget->yellowLight(), 1000);        yellowLight->setObjectName("yellowLight");//绿灯状态        QState *greenLight = createLightState(widget->greenLight(), 3000);        greenLight->setObjectName("greenLight");//红灯------>黄灯 切换        redLight->addTransition(redLight, SIGNAL(finished()), yellowLight);//黄灯------>绿灯 切换            yellowLight->addTransition(yellowLight, SIGNAL(finished()), greenLight);//绿灯------>红灯 切换        greenLight->addTransition(greenLight, SIGNAL(finished()), redLight);        machine->addState(redLight);        machine->addState(yellowLight);        machine->addState(greenLight);        machine->setInitialState(redLight);        machine->start();

动画控制小车移动

QPropertyAnimation *animation = new QPropertyAnimation(m_carWidget, "pos");animation->setDuration(2500);animation->setEndValue(QPoint(200, 300));animation->start(QAbstractAnimation::DeleteWhenStopped);

结尾

只为记录,只为分享! 愿所写能对你有所帮助。Good Good Study, Day Day Up!
主要代码都在上面,工程就不上传了,需要工程文件的,留言,或者加QQ。我发给各位。状态机那块,参考了QtDemo

原创粉丝点击