700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > qt 在label上以光标位置进行缩放_缩放|位移|渐变简单动画

qt 在label上以光标位置进行缩放_缩放|位移|渐变简单动画

时间:2022-08-03 05:28:51

相关推荐

qt 在label上以光标位置进行缩放_缩放|位移|渐变简单动画

本文简单介绍Qt的一些动画效果(缩放,位移,渐变)。

缩放动画

将窗口的geometry(位置,大小)属性作为动画参考实现缩放动画。

代码

QWidget*w=newQWidget;

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();

位移动画

将窗口的pos位置作为动画参考实现位移动画。

代码

QWidget*w=newQWidget;

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();

渐变动画

使用QGraphicsOpacityEffect配合QPropertyAnimation实现渐变动画。

代码

QWidget*w=newQWidget;

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();

动画的几点要素

动画的目标(setTargetObject);动画目标的参考属性(setPropertyName);动画的持续时间(setDuration);动画的开始状态(setStartValue);动画的结束状态(setEndValue);动画循环次数(setLoopCount);动画的启动与暂停(start/stop)。

关于更多

本文源码例子在公众号聊天界面回复"入群"后在群文件获取。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。