Qt笔记_状态机

本文介绍了一种基于Qt的状态机框架实现方案,通过创建不同的状态及过渡,并结合按钮点击事件实现了状态之间的转换。此外,还展示了如何在状态变化过程中应用动画效果,使UI更加平滑自然。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

状态机框架

可以实现类似于小助手插件的效果。可以从一种状态切换到另一种状态。
参考 The State Machine Framework关键字

QApplication app(argc, argv);
    QPushButton button("State Machine");
    // 创建状态机和三个状态,并将三个状态添加到状态机中
    QStateMachine machine;
    QState *s1 = new QState(&machine);
    QState *s2 = new QState(&machine);
    QState *s3 = new QState(&machine);
    // 为按钮部件的geometry属性分配一个值,当进入该状态时会设置该值
    s1->assignProperty(&button, "geometry", QRect(100, 100, 120, 50));
    s2->assignProperty(&button, "geometry", QRect(300, 100, 120, 50));
    s3->assignProperty(&button, "geometry", QRect(200, 200, 120, 50));
    // 使用按钮部件的单击信号来完成三个状态的切换
    QSignalTransition *transition1 = s1->addTransition(&button,
                                                       &QPushButton::clicked, s2);
    QSignalTransition *transition2 = s2->addTransition(&button,
                                                       &QPushButton::clicked, s3);
    QSignalTransition *transition3 = s3->addTransition(&button,
                                                       &QPushButton::clicked, s1);
    QPropertyAnimation *animation = new QPropertyAnimation(&button, "geometry");
    transition1->addAnimation(animation);
    transition2->addAnimation(animation);
    transition3->addAnimation(animation);

    QObject::connect(s3, &QState::entered, &button, &QPushButton::showMinimized);

    // 设置状态机的初始状态并启动状态机
    machine.setInitialState(s1);
    machine.start();
    button.show();
    return app.exec();

状态机中使用动画

在属性上添加动画,即进入一个状态时就开始播放动画。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值