在Qt中我们使用QPropertyAnimation就可以很轻松的实现动画效果,但是一个QPropertyAnimation只能绑定一个属性,也就是说只能用来展示某一个方面的动画效果。 然而在一些较为复杂的场景下单一个的动画效果就显得不够生动,这时候就需要多个QPropertyAnimation协同工作,毕竟现在处处都是讲究团队协作的,就连玩个游戏遇到一堆各干个的坑队友也是十分气人的。

那么多个QPropertyAnimation要怎么一起使用呢?比如说需要一个动画结束后接着另一个动画,我们可以通过连接第一个动画结束的槽函数,在槽函数中调用第二个动画的启动。如果需要两个动画同时运行又该怎么办呢?创建两个动画然后同时启动吗?事实上这样也是可行的就是太

麻烦了,如果要在两个动画之间停留一段时间还得加个定时器,逻辑就会变得非常的复杂了。

这时候就该让QAnimationGroup出场了,动画组顾名思义就是一组的动画,它有两个子类,一个是QParallelAnimationGroup并行动画组,该组里的动画同时运行,另一个是QSequentialAnimationGroup串行动画组,该组里的动画按照添加的顺序一个接一个执行。有了动画组的帮助

制作复杂的动画场景就简单多了。

并行动画举例:实现窗口逐渐清晰进入的效果,这里包含两个属性一个是窗口的透明度,另一个是窗口的位置。

302e0b2b5f9ca1d508991e2ec75b63d1.png

从代码可以看出动画组的使用也很简单,就是调用addAnimation添加动画对象,最后调用一下start就好了,动画对象就不需要自己start动画了。运行效果如下:

b1a1e0231088058d6990824221fd63a1.gif

串行动画举例: 在并行动画的基础上进行添加,当并行动画结束后让窗口抖动一下。我们可以通过改变窗口的位置来实现抖动效果,因此我们只需要再添加一个pos的属性动画就可以了。

6b6a1c1ed1e4b2b486e063afb6c5f4ec.png

从代码上看串行动画也是调用addAnimation添加动画对象,我们把并行动画组当成一个动画对象添加到串行动画组里。也就是说动画组之间也是可以嵌套使用的,有了嵌套想要实现复杂的动画效果就看你的想象力了。 需要注意的是这里串行动画组调用start启动动画,并行动画组不需要调用start。效果如下:

0efdda9817c5751d17e1d9646e594be4.gif

作者:fearlazy 名字由fear和lazy两个单词组成。

c30dfeb2422666803568ddcc03599e27.png
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐