Qt动画组QAnimationGroup构建复杂的动画

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

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

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

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

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

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

blob.png

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

dh1.gif


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

    blob.png

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

dh2.gif


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

演示站
上一篇:Qt动画入门QPropertyAnimation
下一篇:认识一下Qt状态机QStateMachine

发表评论

评论列表

2019-02-22 09:37:09

这真是一个飘逸的窗口啊

2019-06-21 16:15:29

@访客 哈哈哈