实现效果:
动画:
// 动画对象
QPropertyAnimation * pWidgetProcessUp = new QPropertyAnimation(this, "geometry");
// QRect(x,y,width,hight)
pWidgetProcessUp->setStartValue(geometry()); //初始状态
pWidgetProcessUp->setEndValue(QRect(geometry().x(), geometry().y(), width(), height() - ui->textBrowser->height())); //结束状态
pWidgetProcessUp->setDuration(300); //设置动画执行时间,单位毫秒
pWidgetProcessUp->setEasingCurve(QEasingCurve::Linear); //设置速度曲线
pWidgetProcessUp->start(QAbstractAnimation::DeleteWhenStopped); //执行动画,结束后删除对象
延时且只执行一次:
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, [this](){
ui->textBrowser->setVisible(true);
});
timer->setSingleShot(true);
timer->start(230);
源码:
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::on_pushButton_clicked()
{
// Animate window changes
QPropertyAnimation * pWidgetProcessUp = new QPropertyAnimation(this, "geometry");
if(ui->textBrowser->isVisible())
{
pWidgetProcessUp->setStartValue(geometry());
pWidgetProcessUp->setEndValue(QRect(geometry().x(), geometry().y(), width(), height() - ui->textBrowser->height()));//结束值
pWidgetProcessUp->setDuration(260);
pWidgetProcessUp->setEasingCurve(QEasingCurve::Linear);
ui->textBrowser->setVisible(false);
}
else
{
pWidgetProcessUp->setStartValue(geometry());
pWidgetProcessUp->setEndValue(QRect(geometry().x(), geometry().y(), width(), height() + ui->textBrowser->height()));//结束值
pWidgetProcessUp->setDuration(260);
pWidgetProcessUp->setEasingCurve(QEasingCurve::Linear);
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, [this](){
ui->textBrowser->setVisible(true);
// timer->stop();
});
timer->setSingleShot(true);
timer->start(230);
// ui->textBrowser->setVisible(true);
}
pWidgetProcessUp->start(QAbstractAnimation::DeleteWhenStopped);
}