一、按钮之间不同状态的切换
//按钮切换不同的状态。界面的功能逻辑
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();
以上只是关于状态机简单的做一个演示