您的位置:首页 > 编程语言 > Qt开发

Qt动画框架-(1)简介

2017-06-01 10:31 260 查看

动画框架

Qt的动画框架旨在提供创建动画和流畅GUI的简单方法。通过动画化Qt属性,该框架为动画小部件和其他QObject提供了极大的自由。该框架也可以与Graphics View框架一起使用。动画框架中可用的许多概念也可以在Qt Quick中使用,它提供了一种定义动画的声明方式。关于动画框架的许多知识可以应用于Qt Quick。

在本概述中,我们将介绍其架构的基础知识。我们还展示了框架允许动画化QObject和图形项目的最常见技术的例子。

动画架构

我们将在本节中对高清视频动画框架的架构以及如何用于动画化Qt属性。下图显示了动画框架中最重要的类。



图1 动画框架(来自文档)

动画框架基础由基类QAbstractAnimation和它的两个子类QVariantAnimation和QAnimationGroup组成。QAbstractAnimation是所有动画的祖先。它代表了框架中所有动画常见的基本属性; 特别是启动,停止和暂停动画的能力。它也收到时间变化通知。

动画框架进一步提供了QPropertyAnimation类,它继承QVariantAnimation并执行Qt属性的动画,它是Qt的元对象系统的一部分。该类使用缓动曲线对属性进行插值。所以当你想为一个值赋值时,你可以将它声明为一个属性,并使你的类成为一个QObject。请注意,这给了我们很大的自由,动画已经存在的小部件和其他QObject。

复杂的动画可以通过建立的树结构构造QAbstractAnimation秒。该树是通过使用QAnimationGroup来构建的,它可以作为其他动画的容器。还要注意,这些组是QAbstractAnimation的子类,因此组可以包含其他组。

动画框架可以自己使用,但也被设计为状态机框架的一部分(有关Qt状态机的介绍,请参阅状态机框架)。状态机提供可以播放动画的特殊状态。一个QState在进入状态时,也可以设置属性或退出,并给予当这个特殊的动画国家将这些值之间插值QPropertyAnimation。我们稍后会更加仔细的看待。

在幕后,动画由全局定时器控制,它将更新发送到正在播放的所有动画。

有关框架中类的功能和角色的详细说明,请查看其类的描述。

动画框架中的类

这些类提供了创建简单和复杂动画的框架。

QAbstractAnimation所有动画的基础
QAnimationGroup动画组抽象基类
QParallelAnimationGroup平行动画组
QPauseAnimation暂停
QPropertyAnimation动画Qt属性
QSequentialAnimationGroup连续的动画组
QVariantAnimation基础类动画
QEasingCurve轻松控制动画曲线
QTimeLine控制动画的时间表

AbstractAnimation简介

该QAbstractAnimation类是所有动画的基础。

该类定义了所有动画共享功能的功能。通过继承此类,您可以创建自定义动画,插入动画框架的其余部分。

动画的进度由当前时间(currentLoopTime())给出,它以从毫秒计数,从0开始到(duration())结束,该值随着动画运行而更新,也可以直接使用setCurrentTime()来设置。

在任何时候,动画都是由状态枚举定义的三种状态之一:运行,停止或暂停。可以通过调用start(),stop(),pause()或resume()来更改当前状态。动画将始终重置当前开始的时间。如果暂停,它将继续恢复相同的当前时间。当动画停止时,无法恢复,但会保持当前时间(直到再次启动)。QAbstractAnimation将在状态改变时发出stateChanged()。

通过设置loopCount属性,动画可以循环任意次数。当动画当前时间达到duration()时,它将重置当前时间并继续运行。循环计数为1(默认值)表示动画将运行一次。请注意,持续时间为-1表示动画将停止运行; 目前的时间将无限期增加。当当前时间等于duration()并且动画处于其最后循环时,将进入Stopped状态,并发送finished()信号。

QAbstractAnimation提供由子类使用的纯虚拟函数来跟踪动画的进度:duration()和updateCurrentTime()。duration()函数可以报告持续时间的动画(如上所述)。当前时间更改时,动画框架调用updateCurrentTime()。通过重新实现此功能,您可以跟踪动画进度。通常每秒更新60次。

通过重新实现updateState(),您可以跟踪动画的状态更改,这对于不受时间驱动的动画特别有用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt 动画