在应用中,有时候会有这样一种效果,就是某一个按键按下去之后,会弹出一个带有多个按键的界面。这个动画效果,经常是淡入淡出和界面转换同时运行。在QT中,也可以实现。
这里参考的网络例子是:https://www.jianshu.com/p/0050eae56929
还是先上结果好了,点击start按键后,开始动画。
这里比较简要,所以只上主函数的代码即可:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPropertyAnimation>
#include <QParallelAnimationGroup>
#include <QSequentialAnimationGroup>
#include <QGraphicsOpacityEffect>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//scale
//初始化透明效果
QGraphicsOpacityEffect *pButtonOpacity = new QGraphicsOpacityEffect(this);
pButtonOpacity->setOpacity(1);
ui->scaleButton->setGraphicsEffect(pButtonOpacity);
//大小变化动画
pScaleAnimation1 = new QPropertyAnimation(ui->scaleButton, "geometry");
pScaleAnimation1->setDuration(1000);
pScaleAnimation1->setStartValue(QRect(70, 110, 0, 0));
pScaleAnimation1->setEndValue(QRect(70, 110, 140, 140));
pScaleAnimation1->setEasingCurve(QEasingCurve::InOutQuad);
//透明度变化动画
pOpacityAnimation1 = new QPropertyAnimation(pButtonOpacity, "opacity");
pOpacityAnimation1->setDuration(1000);
pOpacityAnimation1->setStartValue(0);
pOpacityAnimation1->setEndValue(1);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_startButton_clicked()
{
static bool Flag = 0;
if(Flag)
{
//设置动画方向
pScaleAnimation1->setDirection(QAbstractAnimation::Forward);
pOpacityAnimation1->setDirection(QAbstractAnimation::Forward);
//动画同时开始
pScaleAnimation1->start();
pOpacityAnimation1->start();
Flag = 0;
}
else
{
pScaleAnimation1->setDirection(QAbstractAnimation::Backward);
pOpacityAnimation1->setDirection(QAbstractAnimation::Backward);
pScaleAnimation1->start();
pOpacityAnimation1->start();
Flag = 1;
}
}
void MainWindow::on_scaleButton_clicked()
{
qDebug()<<"click";
}