
QAbstractAnimation 类是所有动画的基础。
| Header: | #include <QAbstractAnimation> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Inherits: | QObject |
| Inherited By: |
【详细描述】
★ QAbstractAnimation类定义所有动画共享的功能,通过继承这个类,可以引入QT动画框架以便自定义动画。
★ QT中,动画的进度由当前时间 (currentLoopTime()) 以毫秒为单位给出,从动画开始 (0) 到结束 (duration()),这个进度值始终在动画播放时自动更新。用户也可以用 setCurrentTime() 设置。
★ 动画在任何时候都处于以下三种状态之一: Running, Stopped, Paused ,由 State 枚举定义。可以通过调用 start(), stop(), pause() 或 resume()来更改当前状态。
★ 动画在启动时将始终重置。如果暂停,它将在恢复时以相同的当前时间 current time 继续。当动画停止时,它无法恢复,但会保持其当前时间(直到再次启动)。每当其状态发生变化时,QAbstractAnimation 都会发出 stateChanged() 。
★ 动画可以通过设置属性循环任意次数。当动画的当前时间达到其 loopCount 时,它将重置当前时间并继续运行。循环计数为 1(默认值)表示动画将运行一次。请注意,持续时间为 -1 表示动画将一直运行到停止,当前时间将无限增加。当当前时间等于 duration() 且动画处于最终循环时,进入 Stopped 状态,并发出 finished() 信号。
★ QAbstractAnimation 提供子类使用的纯虚函数来跟踪动画的进度: : duration() 和updateCurrentTime()。 duration() 函数允许您报告动画的持续时间(如上所述)。动画框架在当前时间更改时调用 updateCurrentTime()。通过重新实现此功能,您可以跟踪动画进度。请注意,调用之间的间隔和调用此函数的次数均未定义,不过,它通常是每秒 60 次更新。
★ 通过重新实现 updateState(),您可以跟踪动画的状态变化,这对于不受时间驱动的动画特别有用。
参见 QVariantAnimation, QPropertyAnimation, QAnimationGroup, and The Animation Framework
【公有类型】(枚举)
| enum |
|
| enum |
|
| enum |
|
【属性】
| 属性名 | 简介 |
|---|---|
currentLoop : int | 此属性保存动画的当前循环。默认情况下,动画的循环计数为 1,因此当前循环将始终为 0。如果循环计数为 2 并且动画运行超过其持续时间,它将在当前时间 0 和当前循环 1 处自动倒带并重新启动,依此类推。 |
currentTime : int | 此属性描述动画的当前时间。可以通过调用 setCurrentTime 来更改当前时间,也可以调用 start() 并让动画运行,随着动画的进行自动设置当前时间。 |
direction : Direction | 此属性在动画处于 Running 状态时保持动画的方向。 此方向指示时间是从 0 向动画持续时间移动,还是在调用 start() 后从持续时间值向 0 移动。 |
duration : const int | 此属性保存动画的持续时间。 如果持续时间为 -1,则表示持续时间未定义。在这种情况下,将被忽略。 |
loopCount : int | 此属性以整数形式描述动画的循环计数。默认情况下,此值为 1,表示动画应仅运行一次,然后停止。通过更改它,您可以让动画循环多次。如果值为 0,则动画将根本不运行,如果值为 -1,则动画将永远循环,直到停止。不支持在持续时间未定义的动画上循环。它只会运行一次。 |
state : State | 动画的状态。 此属性描述动画的当前状态。当动画状态发生变化时,发出stateChanged() 信号。 |
【公有函数】
| QAbstractAnimation(QObject *parent = nullptr) | ||
| virtual | ~QAbstractAnimation() | |
| QBindable<int> | bindableCurrentLoop() const | |
| QBindable<int> | bindableCurrentTime() | |
| QBindable<QAbstractAnimation::Direction> | bindableDirection() | |
| QBindable<int> | bindableLoopCount() | |
| QBindable<QAbstractAnimation::State> | bindableState() const | |
| int | currentLoop() const | |
| int | currentLoopTime() const | |
| int | currentTime() const | |
| QAbstractAnimation::Direction | direction() const | |
| virtual int | duration() const = 0 | |
| QAnimationGroup * | group() const | |
| int | loopCount() const | |
| void | setDirection(QAbstractAnimation::Direction direction) | |
| void | setLoopCount(int loopCount) | |
| QAbstractAnimation::State | state() const | |
| int | totalDuration() const |
【公有槽函数】
| void | pause() | |
| void | resume() | |
| void | setCurrentTime(int msecs) | |
| void | setPaused(bool paused) | |
| void | start(QAbstractAnimation::DeletionPolicy policy = KeepWhenStopped) | |
| void | stop() |
【信号】
| void | currentLoopChanged(int currentLoop) | 当前循环改变时发送的信号。 |
| void | directionChanged(QAbstractAnimation::Direction newDirection) | 每当方向改变时都会发出此信号。newDirection是新的方向。 |
| void | finished() | 在动画停止并到达末尾后发出此信号。 |
| void | stateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) | 每当动画的状态从 oldState 更改为newState时,就会发出此信号。 |
【受保护函数】
| 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) override |
QAbstractAnimation:Qt核心动画类详解,
本文详细介绍了Qt中的QAbstractAnimation类,它是所有动画的基础,包括动画的进度控制、状态管理、循环模式和事件处理。通过继承该类,开发者可以定制自己的动画效果。
209

被折叠的 条评论
为什么被折叠?



