1.Qt 状态机(Qstate)的学习日志1
#include <QPushButton>
#include <QState>
#include <QStateMachine>
#include <QPropertyAnimation>
#include <QAbstractTransition>
#include <QSignalTransition>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QStateMachine *machine = new QStateMachine();
QState *qst1 = new QState();
QState *qst2 = new QState();
QState *qst3 = new QState();
machine->addState(qst1);
machine->addState(qst2);
machine->addState(qst3);
machine->setInitialState(qst1);
qst1->assignProperty(ui->val,"text","1");
qst1->assignProperty(ui->val,"geometry",QRect(100,10,50,50));
qst2->assignProperty(ui->val,"text","2");
qst2->assignProperty(ui->val,"geometry",QRect(100,100,100,100));
qst3->assignProperty(ui->val,"text","3");
qst3->assignProperty(ui->val,"geometry",QRect(100,200,200,200));
QPropertyAnimation *anim = new QPropertyAnimation(ui->val,"geometry");
anim->setDuration(500);
anim->setEasingCurve(QEasingCurve::InOutBack);
(qst2->addTransition(ui->btn,SIGNAL(clicked(bool)),qst3))->addAnimation(anim);
(qst3->addTransition(ui->btn,SIGNAL(clicked(bool)),qst1))->addAnimation(anim);
(qst1->addTransition(ui->btn,SIGNAL(clicked(bool)),qst2))->addAnimation(anim);
machine->start();
}
效果图
