QVariantAnimation Class
QVariantAnimation 类为动画提供了一个基类。更多
Header: | #include <QVariantAnimation> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
继承: | QAbstractAnimation |
继承于: |
- 所有成员(包括继承成员)的列表
- QVariantAnimation 是动画框架的一部分。
公共类型
属性
|
|
公共职能
QVariantAnimation(QObject *parent = nullptr) | |
virtual | ~QVariantAnimation() |
QBindable<int> | bindableDuration() |
QBindable<QEasingCurve> | bindableEasingCurve() |
QVariant | currentValue() const |
QEasingCurve | easingCurve() const |
QVariant | endValue() const |
QVariant | keyValueAt(qreal step) const |
QVariantAnimation::KeyValues | keyValues() const |
void | setDuration(int msecs) |
void | setEasingCurve(const QEasingCurve &easing) |
void | setEndValue(const QVariant &value) |
void | setKeyValueAt(qreal step, const QVariant &value) |
void | setKeyValues(const QVariantAnimation::KeyValues &keyValues) |
void | setStartValue(const QVariant &value) |
QVariant | startValue() const |
重新实现的公共函数
virtual int | duration() const override |
信号
void | valueChanged(const QVariant &value) |
受保护功能
virtual QVariant | interpolated(const QVariant &from, const QVariant &to, qreal progress) const |
virtual void | updateCurrentValue(const QVariant &value) |
重新实现的受保护函数
virtual bool | event(QEvent *event) override |
virtual void | updateCurrentTime(int) override |
virtual void | updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) override |
相关非成员
void | qRegisterAnimationInterpolator(QVariant (*)(const T &, const T &, qreal) func) |
详细说明
该类是动画框架的一部分。它是属性和项目动画的基类,具有共享功能的函数。
该类在QVariants 上执行插值,但将插值留给子类使用。目前,Qt 提供了QPropertyAnimation ,用于对 Qt属性进行动画处理。如果您想为此类属性制作动画,请参阅QPropertyAnimation 类说明。
然后,您可以通过调用setStartValue() 和setEndValue() 为属性设置起始值和结束值,最后调用start() 开始动画。QVariantAnimation 将插值目标对象的属性并发出valueChanged().要对当前值的变化做出反应,您必须重新实现updateCurrentValue() 虚函数或连接到上述信号。
还可以在起始值和终止值之间的指定步长处设置值。插值将以指定的步长触及这些点。请注意,起始值和终止值被定义为 0.0 和 1.0 的键值。
有两种方法可以影响 QVariantAnimation 插值的方式。您可以通过调用setEasingCurve() 设置缓和曲线,并通过调用setDuration() 配置持续时间。您可以通过创建 QVariantAnimation 的子类并重新实现虚拟interpolated() 函数来改变QVariants 的插值方式。
如果您有不希望声明为 Qt 属性的QVariants,子类化 QVariantAnimation 不失为一种选择。但请注意,在大多数情况下,您最好将QVariant 声明为属性。
并非所有QVariant 类型都受支持。下面列出了目前支持的QVariant 类型:
如果您需要对其他变量类型(包括自定义类型)进行插值,则必须自行对这些类型实施插值。为此,您可以为给定类型注册一个插值函数。该函数需要 3 个参数:起始值、结束值和当前进度。
示例
QVariantmyColorInterpolator(constQColor&start, constQColorend、 qrealprogress) { ... returnQColor(...); } ... qRegisterAnimationInterpolator<QColor>(myColorInterpolator);
另一种方法是重新实现interpolated() ,它将返回被插值的插值。
另请参阅 QPropertyAnimation,QAbstractAnimation, 和The Animation Framework。
成员类型文档
[alias]
QVariantAnimation::KeyValue
这是 std::pair<qreal,QVariant> 的类型定义。
QVariantAnimation::KeyValues
属性文档
[read-only]
currentValue : const QVariant
该属性用于保存动画的当前值。
该属性描述当前值;它是start value 和end value 之间的内插值,使用当前时间作为进度。该值本身是从interpolated() 中获取的,动画运行时会反复调用该函数。
QVariantAnimation 当当前值发生变化时,虚拟 () 函数将被调用。这对需要跟踪更新的子类特别有用。例如, 使用此函数对 Qt XMLupdateCurrentValue QPropertyAnimation 属性进行动画处理。
访问函数:
QVariant | currentValue() const |
Notifier 信号:
void | valueChanged(const QVariant &value) |
另请参见 startValue 和endValue 。
[bindable]
duration : int
注: 此属性支持QProperty 绑定。
此属性保存动画的持续时间
该属性描述动画的持续时间(毫秒)。默认持续时间为 250 毫秒。
另请参阅 QAbstractAnimation::duration().
[bindable]
easingCurve : QEasingCurve
注: 此属性支持QProperty 绑定。
此属性保存动画的缓和曲线
此属性定义动画的缓和曲线。默认情况下,使用线性缓和曲线,从而产生线性插值。我们还提供了其他曲线,例如QEasingCurve::InCirc ,它提供了一条圆形入口曲线。另一个例子是QEasingCurve::InOutElastic ,它为插值变体的值提供了弹性效果。
QVariantAnimation 将使用 () 将动画的 "归一化进度"(currentTime / totalDuration)转换为动画实际使用的有效进度。调用 () 时的进度就是这个有效进度。此外, 中的步骤也是指这个有效进度。QEasingCurve::valueForProgress interpolated keyValues
缓和曲线与插值器、interpolated() 虚拟函数和动画的持续时间一起使用,以控制当前值在动画进程中的变化。
endValue : QVariant
此属性保存动画的结束值
此属性描述动画的结束值。
访问函数:
QVariant | endValue() const |
void | setEndValue(const QVariant &value) |
另请参阅 startValue 。
startValue : QVariant
此属性描述动画的起始值。
此属性描述动画的可选起始值。如果省略,或指定一个空QVariant 作为起始值,动画将使用动画开始时终点的当前位置。
访问功能:
QVariant | startValue() const |
void | setStartValue(const QVariant &value) |
另请参阅 endValue 。
成员函数文档
QVariantAnimation::QVariantAnimation(QObject *parent = nullptr)
构造一个 QVariantAnimation 对象。parent 传递给QAbstractAnimation 的构造函数。
[virtual noexcept]
QVariantAnimation::~QVariantAnimation()
破坏动画。
[override virtual protected]
bool QVariantAnimation::event(QEvent *event)
重实现:QAbstractAnimation::event(QEvent *event).
[virtual protected]
QVariant QVariantAnimation::interpolated(const QVariant &from, const QVariant &to, qreal progress) const
此虚函数返回变体from 和to 之间的线性插值,返回值为progress ,通常为 0 和 1 之间的值。您可以在QVariantAnimation 的子类中重新实现此函数,以提供自己的插值算法。
需要注意的是,如果QEasingCurve 的返回值小于 0 或大于 1(如QEasingCurve::InBack ),则插值算法必须确保可以外推。如果数据类型的语义不允许外推法,该函数应优雅地处理这种情况。
如果您希望您的类处理 Qt XML 已支持的类型,则应调用QVariantAnimation 实现此函数(支持的类型列表请参见类QVariantAnimation 说明)。
另请参见 QEasingCurve 。
QVariant QVariantAnimation::keyValueAt(qreal step) const
返回给定step 的关键帧值。给定的step 必须在 0 到 1 的范围内。如果step 没有KeyValue ,则返回无效的QVariant 。
另请参阅 keyValues() 和setKeyValueAt()。
QVariantAnimation::KeyValues QVariantAnimation::keyValues() const
返回动画的关键帧。
另请参阅 keyValueAt() 和setKeyValues()。
void QVariantAnimation::setKeyValueAt(qreal step, const QVariant &value)
使用给定的value 在给定的step 上创建关键帧。step 的范围必须在 0 到 1 之间。
另请参阅 setKeyValues() 和keyValueAt()。
void QVariantAnimation::setKeyValues(const QVariantAnimation::KeyValues &keyValues)
用给定的keyValues 替换当前的关键帧集。关键帧的步长范围必须在 0 到 1 之间。
另请参阅 keyValues() 和keyValueAt()。
[override virtual protected]
void QVariantAnimation::updateCurrentTime(int)
重实现:QAbstractAnimation::updateCurrentTime(int currentTime)。
[virtual protected]
void QVariantAnimation::updateCurrentValue(const QVariant &value)
每次动画的当前值发生变化时,都会调用这个虚拟函数。value 参数是新的当前值。
基类实现不做任何操作。
另请参见 currentValue 。
[override virtual protected]
void QVariantAnimation::updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)
重实现:QAbstractAnimation::updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)。
[signal]
void QVariantAnimation::valueChanged(const QVariant &value)
QVariantAnimation 每当当前 发生变化时,都会发出该信号。value
注: 属性currentValue 的通知信号。
另请参阅 currentValue,startValue, 和endValue 。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.