Qt动画类 QPropertyAnimation
显示动画
QPropertyAnimation *animation = new QPropertyAnimation(window(), "windowOpacity");
或者
QPropertyAnimation *animation= new QPropertyAnimation();
Animation->setTargetObject(window());
Animation->setPropertyName("windowOpacity");
第一个参数是需要进行动画的窗体,第二个参数是要进行的操作(渐变出现,移动位置,逐渐放大放小等功能)。
windowOpacity:逐渐出现和逐渐消失动画
//界面动画,改变透明度的方式出现0 - 1渐变
QPropertyAnimation *animation = new QPropertyAnimation(window(), "windowOpacity");
animation->setEasingCurve(QEasingCurve::NCurveTypes);//线性
animation->setDuration(1000);//为期1分钟完成
animation->setStartValue(0);//开始是全部隐藏
animation->setEndValue(1);//结束是全部显现
animation->start(QAbstractAnimation::DeleteWhenStopped);//结束时自动释放资源
移动动画
Pos:移动动画
//界面动画效果移动
QPropertyAnimation *animation = new QPropertyAnimation(m_bottomToolbar, "pos");
animation->setDuration(200);//0.2秒完成
animation->setEasingCurve(QEasingCurve::NCurveTypes);//线性
animation->setStartValue(QPoint((width() - m_bottomToolbar->width()) / 2, m_bottomToolbar->y()));//开始位置
animation->setEndValue(QPoint((width() - m_bottomToolbar->width()) / 2, height() - m_bottomToolbar->height() - 10));//结束位置
animation->start(QAbstractAnimation::DeleteWhenStopped);//结束时自动释放资源
放大缩小
size:放大或者缩小
QPropertyAnimation *animation=new QPropertyAnimation(window(), "size");
animation->setDuration(200);//时间0.2秒
QDesktopWidget* desktopWidget = QApplication::desktop();
QRect screenRect = desktopWidget->screenGeometry(); //屏幕区域
int w = screenRect.width();
int h = screenRect.height();
QSize a(window()->size());
animation->setStartValue(QSize(window()->size()*0.9));//初始大小
animation->setEndValue(QSize(w,h));//结束大小
animation->start(QAbstractAnimation::DeleteWhenStopped);//完成时回收资源
大小和位置的改变
geometry:大小和位置的改变
//大小和位置
/* 声明动画类,并将控制对象 this (this一定是继承自QObject的窗口部件) 以及属性名 "geometry" 传入构造函数 */
QPropertyAnimation* animation = nenw QPropertyAnimation(this, "geometry");
/* 设置动画持续时长为 2 秒钟 */
animation->setDuration(2000);
/* 设置动画的起始状态 起始点 (1,2) 起始大小 (3,4) */
animation->setStartValue(QRect(1, 2, 3, 4));
/* 设置动画的结束状态 结束点 (100,200) 结束大小 (300,400) */
animation->setsEndValue(QRect(100, 200, 300, 400));
/* 设置动画效果 */
animation->setEasingCurve(QEasingCurve::OutInExpo);
/* 开始执行动画 QAbstractAnimation::DeleteWhenStopped 动画结束后进行自清理(效果就好像智能指针里的自动delete animation) */
animation->stsart(QAbstractAnimation::DeleteWhenStopped);