qt状态机框架

53 篇文章 36 订阅

                  这是以前做一个医疗系统的一部分程序,只是这个项目不了了之了。

                  如下图所示:

                 

                 

  /**
     * @brief machine  状态机
     */
    QStateMachine *machine = new QStateMachine;
    /**
     * @brief machine1
     */
    QStateMachine *machine1 = new QStateMachine;

    QState *s1 = new QState(machine);
    s1->assignProperty(ui->label,"geometry",QRect(80,60,50,120));



    QState *s2 = new QState(machine);
    s2->assignProperty(ui->label,"geometry",QRect(10,10,35,85));

    machine->setInitialState(s2);

    QState *s3 = new QState(machine1);
    s3->assignProperty(ui->label_2,"geometry",QRect(10,10,35,85));

    QState *s4 = new QState(machine1);
    s4->assignProperty(ui->label_2,"geometry",QRect(80,60,50,120));
    machine1->setInitialState(s4);

    QPropertyAnimation *ani = new QPropertyAnimation(ui->label,"geometry");
    ani->setDuration(1000);
    ani->setEasingCurve(QEasingCurve::OutCurve);

    QPropertyAnimation *ani1 = new QPropertyAnimation(ui->label_2,"geometry");
    ani1->setDuration(1000);
    ani1->setEasingCurve(QEasingCurve::InCurve);

    QEventTransition *s1tos2 = new QEventTransition(ui->label_2, QEvent::MouseButtonPress);
    s1tos2->setTargetState(s2);
    s1->addTransition(s1tos2);
    s1tos2->addAnimation(ani);

    QEventTransition *s3tos4 = new QEventTransition(ui->label_2, QEvent::MouseButtonPress);
    s3tos4->setTargetState(s4);
    s3->addTransition(s3tos4);
    s3tos4->addAnimation(ani1);

    QEventTransition *s2tos1 = new QEventTransition(ui->label, QEvent::MouseButtonPress);
    s2tos1->setTargetState(s1);
    s2->addTransition(s2tos1);
    s2tos1->addAnimation(ani);

    QEventTransition *s4tos3 = new QEventTransition(ui->label, QEvent::MouseButtonPress);
    s4tos3->setTargetState(s3);
    s4->addTransition(s4tos3);
    s4tos3->addAnimation(ani1);
一个小人一个状态机,一个状态机有两个状态,为改变位置和大小,触发转换的是点击放置图片的label,在状态转换时,我们是使用了动画,才得出了两个小人现在的这个效果

                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值