本文简单介绍Qt的一些动画效果(缩放,位移,渐变)。
缩放动画
将窗口的geometry(位置,大小)属性作为动画参考实现缩放动画。
代码
w->setWindowTitle(QStringLiteral("缩放动画@Qt君")); w->resize(320,240); QLabel*label=newQLabel(w); /*创建一个动画对象*/ QPropertyAnimation*animation=newQPropertyAnimation(label); /*设置动画持续时长*/ animation->setDuration(3000); /*设置动画目标*/ animation->setTargetObject(label); /*设置窗口几何属性(位置,大小)作为动画参考*/ animation->setPropertyName("geometry"); /*设置动画开始坐标和大小(QRect)*/ /*居中显示数值计算:160=>(320/2 - 100); 120=>(240/2 - 100)*/ animation->setStartValue(QRect(160,120,0,0)); /*设置动画结束坐标和大小(QRect)*/ /*居中显示数值计算(差值是基于开始动画的100/2):160=>(160- 100/2); 70=>(120- 100/2)*/ animation->setEndValue(QRect(110,70,100,100)); /*设置循环次数:-1为无限次*/ animation->setLoopCount(-1); /*开始动画*/ animation->start(); w->show();QWidget*w=newQWidget;
位移动画
将窗口的pos位置作为动画参考实现位移动画。
代码
w->setWindowTitle(QStringLiteral("位移动画@Qt君")); w->resize(320,240); QLabel*label=newQLabel(w); label->resize(100,100); /*创建一个动画对象*/ QPropertyAnimation*animation=newQPropertyAnimation(label); /*设置动画目标*/ animation->setTargetObject(label); /*设置窗口的位置作为动画参考*/ animation->setPropertyName("pos"); /*设置动画持续时长*/ animation->setDuration(3000); /*设置动画开始位置*/ animation->setStartValue(QPoint(0,70)); /*设置动画结束位置*/ animation->setEndValue(QPoint(220,70)); /*设置循环次数:-1为无限次*/ animation->setLoopCount(-1); /*开始动画*/ animation->start(); w->show();QWidget*w=newQWidget;
渐变动画
使用QGraphicsOpacityEffect配合QPropertyAnimation实现渐变动画。
代码
w->setWindowTitle(QStringLiteral("渐变动画@Qt君")); w->resize(320,240); /*创建一个不透明效果对象*/ QGraphicsOpacityEffect*opacityEffect=newQGraphicsOpacityEffect; opacityEffect->setOpacity(1); QLabel*label=newQLabel(w); label->setGeometry(110,70,100,100); /*设置控件的图形效果*/ label->setGraphicsEffect(opacityEffect); /*创建一个动画对象*/ QPropertyAnimation*animation=newQPropertyAnimation(label); /*设置动画目标*/ animation->setTargetObject(opacityEffect); /*设置窗口的不透明度作为动画参考*/ animation->setPropertyName("opacity"); /*设置动画持续时长*/ animation->setDuration(3000); /*设置动画开始的不透明度*/ animation->setStartValue(0); /*设置动画结束的不透明度*/ animation->setEndValue(1); /*设置循环次数:-1为无限次*/ animation->setLoopCount(-1); /*开始动画*/ animation->start(); w->show();QWidget*w=newQWidget;