Qt中记录状态机的使用

本文介绍了如何使用QStateMachine在用户界面中实现按钮状态的动态切换,包括不同样式和启用状态的控制,以及结合动画的切换过程。通过实例展示了状态机在UI逻辑中的应用。

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

一、按钮之间不同状态的切换

//按钮切换不同的状态。界面的功能逻辑
void mianWidget::createTest()
{
    QStateMachine *machine = new QStateMachine(ui->pushButton); //创建状态机
    QState *state1 = new QState(machine);
    state1->assignProperty(ui->pushButton, "styleSheet", "background-color: rgb(215,208,238)");  //设置背景
    state1->assignProperty(ui->pushButton_2, "styleSheet", "background-color: rgb(45,208,8)");  //设置背景
    state1->assignProperty(ui->pushButton_2, "enabled", "true");  //是否启用

    QState *state2 = new QState(machine);
    state2->assignProperty(ui->pushButton, "text", "black");
    state2->assignProperty(ui->pushButton, "styleSheet", "background-color: rgb(230,218,8)");  //设置背景
    state2->assignProperty(ui->pushButton_2, "styleSheet", "background-color: rgb(245,8,8)");  //设置背景
    state2->assignProperty(ui->pushButton_2, "text", "blacksss");
    state2->assignProperty(ui->pushButton_2, "enabled", "false");  //是否启用

    //关联三个状态间的切换
    state1->addTransition(ui->pushButton, SIGNAL(clicked()), state2);
    state2->addTransition(ui->pushButton, SIGNAL(clicked()), state1);
    
    machine->setInitialState(state1); //将此状态的初始状态设置为给定状态
    machine->start();

}

二、状态机中动画的切换

   // 创建状态机
    QPushButton *button = new QPushButton("Animated Button",this);
    button->show();
    QStateMachine *machine = new QStateMachine(button); //状态机
    //创建两个状态,状态的属性由一个QPushButton的位置大小决定。
    QState *state1 = new QState(machine);
    state1->assignProperty(button, "geometry", QRect(0, 0, 150, 30));
    // 将状态1设置为状态机的初始状态
    machine->setInitialState(state1); //将此状态的初始状态设置为给定状态
    //QState *state2 = new QState(machine->rootState());
    QState *state2 = new QState(machine);
    state2->assignProperty(button, "geometry", QRect(250, 250, 150, 30));
    //增加触发状态1到状态2的触发条件,QPushButton按钮被按下,动画效果由addAnimation()完成
    QSignalTransition *transition1 = state1->addTransition(button, SIGNAL(clicked()), state2);
    transition1->addAnimation(new QPropertyAnimation(button, "geometry")); //将给定的动画添加到此转换中
    QSignalTransition *transition2 = state2->addTransition(button,SIGNAL(clicked()), state1);
    transition2->addAnimation(new QPropertyAnimation(button, "geometry"));
    //将状态机启动
    machine->start();
    createTest();

以上只是关于状态机简单的做一个演示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值