[TOC]

QAbstractAnimation 类

QAbstractAnimation 是所有的动画相关的基类。

QAbstractAnimation 定义了所有动画类相关的基础功能,通过继承该类,您可以实现动画的其它功能,或者添加自定义的特效。

属性方法
头文件#include<QAbstractAnimation>
qmakeQT+=core
自从Qt 4.6
继承QObject
派生QAnimationGroupQPauseAnimationQVariantAnimation

公共成员类型

类型方法
enumDeletionPolicy { KeepWhenStopped, DeleteWhenStopped }
enumDirection { Forward, Backward }
enumState { Stopped, Paused, Running }

属性

属性类型属性类型
currentLoopconst intdurationconst int
currentTimeintloopCountint
directionDirectionstateconst State

公共成员函数

返回类型函数名
QAbstractAnimation(QObject *parent = Q_NULLPTR)
virtual~QAbstractAnimation()
intcurrentLoop() const
intcurrentLoopTime() const
intcurrentTime() const
Directiondirection() const
virtual intduration() const = 0
QAnimationGroup *group() const
intloopCount() const
voidsetDirection(Direction direction)
voidsetLoopCount(int loopCount)
Statestate() const
inttotalDuration() const

公共槽

返回类型函数名
voidpause()
voidresume()
voidsetCurrentTime(int msecs)
voidsetPaused(bool paused)
voidstart(QAbstractAnimation::DeletionPolicy policy = KeepWhenStopped)
voidstop()

信号

返回类型函数名
voidcurrentLoopChanged(int currentLoop)
voiddirectionChanged(QAbstractAnimation::Direction newDirection)
voidfinished()
voidstateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)

保护成员函数

返回类型函数名
virtual voidupdateCurrentTime(int currentTime) = 0
virtual voidupdateDirection(QAbstractAnimation::Direction direction)
virtual voidupdateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)

重写保护成员函数

返回类型函数名
virtual boolevent(QEvent *event)

详细介绍

QAbstractAnimation 定义了所有动画共享的功能。通过继承这个类,您可以创建自定义的动画,并将其插入到动画框架中。

动画的进度的当前时间由当前时间(currentLoopTime())控制,数值从0毫秒开始到其最后的持续时间(duration())。该值在动画运行时会自动更新,也可以直接由 setCurrentTime() 来设置。

在任何时候,动画的状态都只有三种:RunningStoppedPaused——由枚举变量 State定义。可以通过函数 start()、stop() 、pause() 或 resume() 来改变当前动画的状态。动画开始时总会重置它的当前时间。若被暂停,则继续播放后会从相同的“当前时间”继续。若动画停止,则无法继续,但会保留“当前时间”(直到再次开始)。QAbstractAnimation 在状态改变时将会发出信号 stateChanged()。

通过设置 loopCount 属性,动画可以循环任意次数。当动画的时间到达 duration() 时,它将重置当前时间并继续运行。循环数为1(默认值)意味着动画只会播放一次。注意,若 duration 为-1,动画将无限播放,直到主动停止;当前时间会无限增长。当当前时间等于 duration() ,并且正在处理最后一次循环时,动画将进入 Stopped 状态,并发送 finished() 信号。

QAbstractAnimation 为子类提供了纯虚函数来跟踪动画的进度:duration() 和 updateCurrentTime()。duration() 函数用于提供动画的持续时间(如上文所述)。当动画时间变化时,动画框架会调用 updateCurrentTime()。通过重新实现该函数,您可以追踪动画进度。注意:此函数的调用间隔和调用次数均未定义,虽然通常每秒会更新60次。

通过重新实现 updateState(),您可以追踪动画状态的改变,这对于不受时间驱动的动画特别有用。

另请参阅:QVariantAnimationQPropertyAnimationQAnimationGroupThe Animation Framework

成员变量文档

enum QAbstractAnimation::DeletionPolicy

函数描述
QAbstractAnimation::KeepWhenStopped0动画停止时不会被删除
QAbstractAnimation::DeleteWhenStopped1动画停止时会被自动删除

enum QAbstractAnimation::Direction

该枚举描述了动画在 Running 状态时的运行的方向。

函数描述
QAbstractAnimation::Forward0“当前时间”随时间递增(即从0向终点/duration 移动)
QAbstractAnimation::Backward1”当前时间“随时间递减(即从终点/duration 向0移动)

enum QAbstractAnimation::State

该枚举描述了动画的状态。

函数描述
QAbstractAnimation::Stopped0动画未运行。这是 QAbstractAnimation 的初始状态,也是 [QAbstractAnimation] 结束后的状态。除非 setCurrentTime() 被调用,或者调用 start() 来启动动画,否则”当前时间“不会改变。
QAbstractAnimation::Paused1动画暂停(即使暂时挂起)。调用 resume() 将恢复动画。
QAbstractAnimation::Running2动画运行中。当控制权处于事件循环中时,QAbstractAnimation 将会有规律地更新”当前时间“,并在适合地时机调用 updateCurrentTime()。

属性文档

currentLoop : const int

此属性存储动画当前的循环数。

此属性描述了动画当前的循环数。默认的循环次数为1,所以当前的循环次数永远为0。若循环总数2的,当动画运行超过其 duration 时将重新开始,并将当前时间重置为0,当前循环数置为1,以此类推。

当当前循环变化时,QAbstractAnimation 会发出 currentLoopChanged() 信号。

存取函数

返回类型函数名
intcurrentLoop() const

通知信号

返回类型函数名
voidcurrentLoopChanged(int currentLoop)

currentTime : int

此属性存储动画当前的时间与进度。

此属性描述了动画当前的时间。您可以通过 setCurrentTime 函数来修改当前时间,也可以调用 start() 让动画运行,当前时间会随动画播放进度自动设置。

动画的当前时间从0开始,在 totalDuration() 结束。

存取函数

返回类型函数名
intcurrentTime() const
voidsetCurrentTime(int msecs)

另请参阅:loopCountcurrentLoopTime()。


direction : Direction

该属性存储动画在 Running 状态时的运行方向。

该方向表明了在 start() 被调用后,时间是从0向动画时长移动,还是从持续时间向0移动。

默认方向为 Forward

存取函数

返回类型函数名
Directiondirection() const
voidsetDirection(Direction direction)

通知信号

返回类型函数名
voiddirectionChanged(QAbstractAnimation::Direction newDirection)

duration : const int

该属性存储动画的持续时间。

如果 duration 为-1,则表示 duration 未定义,此时动画将会忽略 loopCount 属性。

存取函数

属性函数名
virtual intduration() const = 0

loopCount : int

该属性存储动画的循环次数。

此属性用整形描述了动画的循环次数。默认值为1,表示该动画只播放一次,然后停止。通过修改其值,动画会改变循环的次数。当值为0时,动画完全不会运行;当值为-1时,动画将会永远循环直到主动停止。如果动画未设置 duration 属性则无法循环,即只会播放一次。 存取函数

属性函数名
intloopCount() const
voidsetLoopCount(int loopCount)

state : const State

动画状态。 此属性描述了动画的当前状态。当动画状态改变时,QAbstractAnimation 会发射 stateChanged() 信号。

存取函数

属性函数名
Statestate() const

通知信号

属性函数名
voidstateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)

成员函数文档

QAbstractAnimation::QAbstractAnimation(QObject *parent = Q_NULLPTR)

构造 QAbstractAnimation 基类,并将 parent 参数传递给 QObject 的构造函数。

另请参阅:QVariantAnimationQAnimationGroup


[signal] void QAbstractAnimation::currentLoopChanged(int currentLoop)

每当当前循环发生变化时,QAbstractAnimation 会发射该信号。currentLoop 为当前循环。

注意: 属性 currentLoop 的通知信号。

另请参阅:currentLoop() 和 loopCount()。


[signal] void QAbstractAnimation::directionChanged(QAbstractAnimation::Direction newDirection)

每当方向改变时,QAbstractAnimation 会发射该信号。newDirection 为新方向。

注意: 属性 direction 的通知信号。

另请参阅:direction()。


[signal] void QAbstractAnimation::finished()

在动画停止并到达终点之后发送此信号。

该信号在 stateChanged() 之后发射。

另请参阅:stateChanged()。


[slot] void QAbstractAnimation::pause()

暂停动画。当动画暂停时,state() 返回 Paused。在调用 resume() 或 start() 前,currentTime() 的值将会保持不变。若想从当前时间继续,则调用 resume()函数。

另请参阅:start(),state() 和 resume()。


[slot] void QAbstractAnimation::resume()

暂停后恢复动画。当动画恢复时,会发射会发出 resumed() 信号和 stateChanged() 信号。当前时间不会变化。

另请参阅:startpause() 和 state()。


[slot] void QAbstractAnimation::setPaused(bool paused)

pausedtrue,则暂停动画。若 pausefalse,则恢复动画播放。

另请参阅:state(),pause() 和 resume()。


[slot] void QAbstractAnimation::start(QAbstractAnimation::DeletionPolicy policy = KeepWhenStopped)

开始动画。policy 参数表示动画在结束后是否会被删除。动画启动时,会发射 stateChanged() 信号,state() 会返回 Running。当控制权回到事件循环时,动画会自动播放,并随播放进度周期性调用 updateCurrentTime(),

若动画当前已被停止或者已经结束,调用 start() 将会充值动画并从头开始。当动画到达终点时,动画将会停止;或者当其循环次数大于1,则会从头开始。

若动画已经在运行中,此函数不会有任何操作。

另请参阅:stop() 和 state()。


[signal] void QAbstractAnimation::stateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)

每当动画的状态从 oldState 变为 newState 时,QAbstractAnimation 会发射此信号。此信号会在虚函数 updateState()被调用后发射。

注意: 属性 state 的通知信号。

另请参阅:updateState()。


[slot] void QAbstractAnimation::stop()

停止动画。当动画停止时,会发射 stateChanged() 信号,state() 返回 Stopped。当前时间不会变化。

若动画到达终点后自动结束(比如 currentLoopTime() == duration() 或者 currentLoop() > loopCount() - 1),则会发射 finished() 信号。

另请参阅:start() 和 state()。


[virtual] QAbstractAnimation::~QAbstractAnimation()

若在运行中则停止动画,然后销毁 QAbstractAnimation。若当前动画是 QAnimationGroup 的一部分,则会在销毁前被自动移除。


int QAbstractAnimation::currentLoopTime() const

返回当前循环中的当前时间。它的范围为0到 duration()。

另请参阅: duration() 和 currentTime()。


[pure virtual] int QAbstractAnimation::duration() const

此纯虚函数返回动画持续时间,并定义 QAbstractAnimation 应该多久更新一次当前时间。持续时间是本地的,并且不包括循环总数。

返回值-1表示动画没有定义持续时间,动画将永远运行下去,直到被主动停止。这对于非时间驱动的动画或者无法预测其持续时间的动画(例如游戏中事件驱动的音频回放)十分有用。

若该动画是并行的 QAbstractAnimation 是并行的,则持续时间是所有动画中最长的。若此动画是顺序的 QAnimationGroup,则持续时间是所有动画的总和。

注意:duration 属性的获取函数。

另请参阅:loopCount()。


[virtual protected] bool QAbstractAnimation::event(QEvent *event)

QObject::event(QEvent *e) 的重新实现。


QAnimationGroup *QAbstractAnimation::group() const

若此动画是 QAnimationGroup 的一部分,则会返回该动画组的指针,否则返回nullptr

另请参阅:QAnimationGroup::addAnimation()。


int QAbstractAnimation::totalDuration() const

返回动画的有效持续时间的综合,包含循环次数。 另请参阅:duration() 和 currentTime()。


[pure virtual protected] void QAbstractAnimation::updateCurrentTime(int currentTime)

此虚函数会当动画的 currentTime 每次发生变化时被调用。

另请参阅:updateState()。


[virtual protected] void QAbstractAnimation::updateDirection(QAbstractAnimation::Direction direction)

此虚函数会在 QAbstractAnimation 的播放方向改变时被调用。参数 direction 表示新的方向。

另请参阅:setDirection(),direction()。


[virtual protected] void QAbstractAnimation::updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)

此虚函数会在动画的状态改变从 oldState 切换为 newState 时被调用。

另请参阅:start(),stop(),pause() 和 resume()。