widget.h
#include <QWidget>
#include <QPropertyAnimation>
#include <QSequentialAnimationGroup>
#include <QParallelAnimationGroup>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_pushButton_clicked();
private:
Ui::Widget *ui;
private:
QPropertyAnimation *animation;
QPropertyAnimation *animation2;
QSequentialAnimationGroup sequentialAnimationGroup;//串行动画组
QParallelAnimationGroup parallelAnimationGroup;//并行动画组
};
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QStateMachine>
#include <QSignalTransition>
#include <QDebug>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//常见QPropertyAnimation对象,关联了myWidget这个窗体的几何属性
animation = new QPropertyAnimation(ui->pushButton, "geometry");
animation2 = new QPropertyAnimation(ui->pushButton_2, "geometry");
animation->setDuration(1500);//速度,越小越快
animation->setStartValue(QRect(0,0,120,30));
animation->setEndValue(QRect(150,150,120,30));
animation->setEasingCurve(QEasingCurve::Linear);
// animation->setEasingCurve(QEasingCurve::OutBounce);//outbounce有一个缓冲的现象
// animation->setEasingCurve(QEasingCurve::OutBack);//outback缓慢降落
// animation->setEasingCurve(QEasingCurve::OutCirc);//outcirc和outback差不多
// animation->setEasingCurve(QEasingCurve::OutInQuart);
animation2->setDuration(1500);
animation2->setStartValue(QRect(200,0,120,30));
animation2->setEndValue(QRect(150,180,120,30));
animation2->setEasingCurve(QEasingCurve::OutBounce);//outbounce有一个缓冲的现象
//动画组
parallelAnimationGroup.addAnimation(animation);
parallelAnimationGroup.addAnimation(animation2);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
// animation->start();
parallelAnimationGroup.start();
}