QAbstractAnimation Class

QAbstractAnimation 是所有的动画类的基类. 更多...

头文件: #include <QAbstractAnimation>
qmake: QT += core
开始支持版本: Qt 4.6
基类: QObject
派生类:

QAnimationGroup, QPauseAnimation, and QVariantAnimation

公有类型

enum DeletionPolicy { KeepWhenStopped, DeleteWhenStopped }
enum Direction { Forward, Backward }
enum State { Stopped, Paused, Running }

属性

公有函数

QAbstractAnimation(QObject *parent = Q_NULLPTR)
virtual ~QAbstractAnimation()
int currentLoop() const
int currentLoopTime() const
int currentTime() const
Direction direction() const
virtual int duration() const = 0
QAnimationGroup *group() const
int loopCount() const
void setDirection(Direction direction)
void setLoopCount(int loopCount)
State state() const
int totalDuration() const
  • 32 个公有函数继承自 QObject

公有槽函数

void pause()
void resume()
void setCurrentTime(int msecs)
void setPaused(bool paused)
void start(QAbstractAnimation::DeletionPolicy policy = KeepWhenStopped)
void stop()
  • 1 个公有槽函数继承自 QObject

信号

void currentLoopChanged(int currentLoop)
void directionChanged(QAbstractAnimation::Direction newDirection)
void finished()
void stateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)

受保护的函数

virtual void updateCurrentTime(int currentTime) = 0
virtual void updateDirection(QAbstractAnimation::Direction direction)
virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)

重新实现的受保护函数

virtual bool event(QEvent *event)
  • 9 个受保护的函数继承自 QObject

其他继承的成员

  • 11 个静态公有成员继承自 QObject

详细描述

QAbstractAnimation 是所有的动画类的基类.

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

动画的进度由当前时间 (currentLoopTime()) 给出, 以毫秒为单位, 数值从动画开始 (0) 到结束 (duration()). 这个值会在动画运行时自动更新, 也可以直接调用 setCurrentTime() 设置.

在任何时候, 动画都处于三种状态之一: Running, Stopped, 或 Paused——由枚举变量 State 定义. 可以通过调用 start(), stop(), pause(), 或 resume() 更改当前动画状态. 动画在开始时, 总是会重置当前时间. 如果暂停, 则继续播放时会从相同的"当前时间"继续. 如果动画停止, 则无法恢复, 但会保留当前时间(直到再次开始). QAbstractAnimation 在状态改变时, 会发出 stateChanged().

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

QAbstractAnimation 为子类提供纯虚函数来跟踪动画进度: duration() 和 updateCurrentTime(). duration() 函数报告动画的持续时间(如上所述). 当前时间更改时, 动画框架调用 updateCurrentTime(). 通过重新实现该函数, 你可以跟踪动画进度. 注意: 这个函数的调用间隔和调用次数均未定义, 不过, 通常每秒更新 60 次.

重新实现 updateState(), 可以跟踪动画的状态变化, 这对于非时间驱动的动画特别有用.

参见 QVariantAnimation, QPropertyAnimation, QAnimationGroup, The Animation Framework.

成员类型

enum QAbstractAnimation::DeletionPolicy

ConstantValueDescription
QAbstractAnimation::KeepWhenStopped0动画停止时不会被删除.
QAbstractAnimation::DeleteWhenStopped1动画停止时会自动删除.

enum QAbstractAnimation::Direction

这个枚举变量描述了在 Running 状态时, 动画的方向.

ConstantValueDescription
QAbstractAnimation::Forward0"当前时间"随时间递增(即, 从0向终点/duration移动).
QAbstractAnimation::Backward1"当前时间"随时间递减(即, 从终点/duration向0移动).

参见 direction.

enum QAbstractAnimation::State

这个枚举变量描述了动画状态.

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

参见 state() 和 stateChanged().

属性

currentLoop : const int

This property holds the current loop of the animation

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

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

访问函数:

int currentLoop() const

Notifier signal:

void currentLoopChanged(int currentLoop)

currentTime : int

This property holds the current time and progress of the animation

这个属性描述动画当前时间. 调用setCurrentTime函数修改当前时间, 调用 start() 让动画运行, 当前时间会随动画播放进度自动设置.

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

访问函数:

int currentTime() const
void setCurrentTime(int msecs)

参见 loopCountcurrentLoopTime().

direction : Direction

这个属性表示动画在 Running 状态时的运行方向.

这个方向表明调用 start() 后, 时间从0向动画时长移动, 还是从动画时长向0移动.

默认方向是 Forward.

访问函数:

Direction direction() const
void setDirection(Direction direction)

Notifier signal:

void directionChanged(QAbstractAnimation::Direction newDirection)

duration : const int

这个属性表示动画的持续时间.

如果duration是-1时, 表示duration未定义. 这种情况下, loopCount被忽略.

访问函数:

virtual int duration() const = 0

loopCount : int

This property holds the loop count of the animation

这个属性表示动画的循环次数. 默认值是1, 表示这个动画只播放一次, 然后停止. 通过修改这个值, 改变动画的循环次数. 当数值是0时, 动画完全不会运行; 当数值是-1时, 动画会永远循环, 直到主动停止. 如果动画未设置duration, 则无法循环, 即只会播放一次.

访问函数:

int loopCount() const
void setLoopCount(int loopCount)

state : const State

动画状态.

这个属性描述动画的当前状态. 动画状态改变时, QAbstractAnimation 会发出 stateChanged() 信号.

访问函数:

State state() const

Notifier signal:

void stateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)

成员函数

QAbstractAnimation::QAbstractAnimation(QObject *parent = Q_NULLPTR)

QAbstractAnimation 构造函数, parent 是父对象指针.

参见 QVariantAnimationQAnimationGroup.

[virtual] QAbstractAnimation::~QAbstractAnimation()

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

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

循环改变时, QAbstractAnimation 发出这个信号. currentLoop 为当前循环.

注意: 这个信号是属性 currentLoop 的通知信号.

参见 currentLoop() and loopCount().

int QAbstractAnimation::currentLoopTime() const

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

参见 duration() and currentTime.

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

动画方向改变时, QAbstractAnimation 发出这个信号. newDirection 是新方向.

注意: 这个信号是属性 direction 的通知信号.

参见 direction.

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

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

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

若这个动画是并行的 QAnimationGroup, 则持续时间是所有动画中最长的. 若这个动画是顺序的 QAnimationGroup, 则持续时间是所有动画的总和.

注意: 这个信号是属性 duration 的获取函数.

参见 loopCount.

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

QObject::event() 的重新实现.

[signal] void QAbstractAnimation::finished()

动画停止, 并到达终点后, QAbstractAnimation 发出这个信号.

这个信号在 stateChanged() 之后发送.

参见 stateChanged().

QAnimationGroup *QAbstractAnimation::group() const

若这个动画是 QAnimationGroup 的一部分, 则会返回 QAnimationGroup 的指针, 否则返回nullptr.

参见 QAnimationGroup::addAnimation().

[slot] void QAbstractAnimation::pause()

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

参见 start(), state(), and resume().

[slot] void QAbstractAnimation::resume()

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

参见 start(), pause(), and state().

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

paused 是 true , 则暂停动画. 若 paused 是 false , 则恢复动画.

参见 state(), pause(), and resume().

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

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

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

若动画已经在运行中, 这个函数不会有任何操作.

参见 stop() and state().

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

每当动画的状态从 oldState 变为 newState 时, QAbstractAnimation 会发出这个信号. 这个信号在调用虚函数 updateState()后发出.

注意: 这个信号是属性 state 的通知信号.

参见 updateState().

[slot] void QAbstractAnimation::stop()

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

若动画到达终点后自动结束 (如., currentLoopTime() == duration() 和 currentLoop() > loopCount() - 1), 则会发出 finished() 信号.

参见 start() and state().

int QAbstractAnimation::totalDuration() const

返回动画的有效持续时间, 包含循环次数.

参见 duration() and currentTime.

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

这个纯虚函数会在动画的 currentTime 发生变化时被调用.

参见 updateState().

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

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

参见 setDirection() and direction().

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

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

参见 start(), stop(), pause(), and resume().