widget.h
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
};
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QStateMachine>
#include <QSignalTransition>
#include <QDebug>
#include <QPropertyAnimation>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//状态机,本质也是通过动画
QStateMachine *machine = new QStateMachine;
//QState *state1 = new QState(machine->rootState());
QState *state1 = new QState(machine);
state1->assignProperty(ui->pushButton, "geometry", QRect(50, 50, 50, 50));
machine->setInitialState(state1);
//QState *state2 = new QState(machine->rootState());
QState *state2 = new QState(machine);
state2->assignProperty(ui->pushButton,"geometry", QRect(200, 200, 100, 100));
QSignalTransition *transition1 = state1->addTransition(ui->pushButton, SIGNAL(clicked()),state2);
transition1->addAnimation(new QPropertyAnimation(ui->pushButton, "geometry"));
QSignalTransition *transition2 = state2->addTransition(ui->pushButton, SIGNAL(clicked()),state1);
transition2->addAnimation(new QPropertyAnimation(ui->pushButton, "geometry"));
machine->start();
}
Widget::~Widget()
{
delete ui;
}