#include <QApplication>
#include <QPushButton>
#include <QStateMachine>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QPushButton button("State Machine");
//创建状态机和3个状态,将3个状态添加到状态机中
QStateMachine machine;
QState *s1 = new QState(&machine);//也可以使用addState()函数
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));
//使用按钮部件的单击信号来完成3个状态的切换
s1->addTransition(&button, SIGNAL(clicked()), s2);
s2->addTransition(&button, SIGNAL(clicked()), s3);
s3->addTransition(&button, SIGNAL(clicked()), s1);
//进入状态会发出entered信号,退出一个状态发射exited信号
QObject::connect(s3, &QState::entered, &button, &QPushButton::showMinimized);//是按钮最小化
//设置状态机的初始状态并启动状态机
machine.setInitialState(s1);
machine.start();
button.show();
//3个状态是互相切换的循环,可以设置QFinalState对象停止,发射finished信号
return a.exec();
}
创建状态机
最新推荐文章于 2025-04-08 16:57:31 发布