QVariantAnimation 类

QVariantAnimation 类提供动画的基类。 更多...

头文件 #include <QVariantAnimation>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core
继承自 QAbstractAnimation
由以下类继承

QPropertyAnimation

公共类型

属性

公共函数

QVariantAnimation(QObject *parent = nullptr)
virtual~QVariantAnimation()
QBindable<int>bindableDuration()
QBindable<QEasingCurve>bindableEasingCurve()
QVariantcurrentValue() const
QEasingCurveeasingCurve() const
QVariantendValue() const
QVariantkeyValueAt(qreal step) const
QVariantAnimation::KeyValueskeyValues() const
voidsetDuration(int msecs)
voidsetEasingCurve(const QEasingCurve &)
voidsetEndValue(const QVariant &value)
voidsetKeyValueAt(qreal step, const QVariant &value)
voidsetKeyValues(const QVariantAnimation::KeyValues &keyValues)
voidsetStartValue(const QVariant &value)
QVariantstartValue() const

重实现的公共函数

virtual intduration() const override

信号

voidvalueChanged(const QVariant &value)

受保护函数

virtual QVariantinterpolated(const QVariant &from, const QVariant &to, qreal progress) const
virtual voidupdateCurrentValue(const QVariant &value)

重实现了保护函数

virtual boolevent(QEvent *event) override
virtual voidupdateCurrentTime(int) override
virtual voidupdateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) override
voidqRegisterAnimationInterpolator(QVariant (*)(const T &, const T &, qreal) func)

详细描述

此类是动画框架的一部分。它作为属性和项目动画的基类,具有用于共享功能的功能。

该类在 QVariant 上执行插值,但留给子类使用插值值。目前,Qt 提供了 QPropertyAnimation,可以动画化 Qt 属性。如果您想动画化此类属性,请参阅 QPropertyAnimation 类描述。

然后,您可以通过调用 setStartValue() 和 setEndValue() 来设置属性的起始和结束值,最后调用 start() 来启动动画。QVariantAnimation 将在目标对象的属性上插值,并发出 valueChanged()。为了响应当前值的更改,您必须重写 updateCurrentValue() 虚拟函数或将该信号连接到。

您还可以在起始值和结束值之间设置特定步骤的值。然后,插值将在指定的步骤上触及这些点。请注意,起始值和结束值定义为0.0和1.0的关键值。

有两种方式可以影响 QVariantAnimation 插值值的方式。您可以通过调用 setEasingCurve() 来设置缓动曲线,并通过调用 setDuration() 来配置持续时间。您可以通过创建 QVariantAnimation 的子类并重写虚拟 interpolated() 函数来更改 QVariant 的插值方式。

如果您的 QVariant 您不希望声明为 Qt 属性,则可以使用float float 作为替代。请注意,在大多数情况下,将您的 QVariant 声明为属性会更好。

并非所有 QVariant 类型都受支持。以下是当前支持的 QVariant 类型列表

如果您需要插值其他变体类型,包括自定义类型,您必须自行实现插值。要做到这一点,您可以为特定类型注册一个插值器函数。此函数接受3个参数:起始值、结束值和当前进度。

示例

    QVariant myColorInterpolator(const QColor &start, const QColor &end, qreal progress)
    {
        ...
        return QColor(...);
    }
    ...
    qRegisterAnimationInterpolator<QColor>(myColorInterpolator);

另一种选择是重写 interpolated(),它返回要插值的值的插值值。

另请参阅QPropertyAnimationQAbstractAnimation动画框架

成员类型文档

[别名] QVariantAnimation::KeyValue

这是 std::pair&qreal,QVariant> 的类型定义。

QVariantAnimation::KeyValues

这是 QList 的类型定义。

属性文档

[只读] currentValue : const QVariant

此属性保存动画的当前值。

此属性描述当前值;一个插值值,介于 起始值结束值 之间,使用当前时间作为进度。值本身从 interpolated() 获得,该函数在动画运行期间被重复调用。

QVariantAnimation 在当前值更改时调用虚拟的 updateCurrentValue() 函数。这对于需要跟踪更新的子类特别有用。例如,QPropertyAnimation 使用此函数来动画化 Qt 属性

访问函数

QVariantcurrentValue() const

通知信号

voidvalueChanged(const QVariant &value)

另请参阅startValueendValue

[可绑定] duration : int

注意:此属性支持 QProperty 绑定。

此属性保存动画的持续时间

此属性描述动画的持续时间(以毫秒为单位)。默认持续时间为 250 毫秒。

另请参阅QAbstractAnimation::duration

[可绑定] easingCurve : QEasingCurve

注意:此属性支持 QProperty 绑定。

此属性保存动画的缓动曲线

此属性定义动画的缓动曲线。默认情况下,使用线性缓动曲线,实现线性插值。还提供其他曲线,例如,QEasingCurve::InCirc,提供圆形进入曲线。另一个示例是 QEasingCurve::InOutElastic,它为插值变量的值提供弹性效果。

QVariantAnimation 将使用 QEasingCurve::valueForProgress() 将动画的 "标准化进度"(currentTime / totalDuration)转换为动画实际使用的有效进度。这是在调用 interpolated() 时所用的进度。也是 keyValues 中的步骤所引用的进度。

缓动曲线与插值器一起使用,与 interpolated() 虚拟函数以及动画的持续时间一起,以控制当前值如何随着动画的进行而变化。

endValueQVariant

此属性持有动画的结束值

该属性描述了动画的结束值。

访问函数

QVariantendValue() const
voidsetEndValue(const QVariant &value)

另请参阅 startValue.

startValue : QVariant

此属性持有动画的可选起始值

该属性描述了动画的可选起始值。如果省略,或如果将空的 QVariant 分配为起始值,动画将在动画启动时使用当前结束值的位置。

访问函数

QVariantstartValue() const
voidsetStartValue(const QVariant &value)

另请参阅 endValue.

成员函数文档

QVariantAnimation::QVariantAnimation(QObject *parent = nullptr)

构建一个 QVariantAnimation 对象。 parent 被传递到 QAbstractAnimation 构造函数中。

[虚拟 noexcept] QVariantAnimation::~QVariantAnimation()

销毁动画。

[重写虚拟受保护] bool QVariantAnimation::event(QEvent *event)

重实现了:QAbstractAnimation::event(QEvent *event)。

[虚拟受保护] QVariant QVariantAnimation::interpolated(const QVariant &from, const QVariant &to, qreal progress) const

此虚拟函数返回从 fromto 变异的线性插值,在 progress 处,通常是一个介于 0 和 1 之间的值。您可以在 QVariantAnimation 的子类中重写此函数以提供自己的插值算法。

请注意,为了使插值与返回小于 0 或大于 1 的值(例如 QEasingCurve::InBack)的 QEasingCurve 一起工作,您应确保它可以进行外推。如果该数据类型的语义不允许外推,则此函数应优雅地处理此情况。

如果您想使您的类处理 Qt 已支持的类型,请注意调用此函数的 QVariantAnimation 实现(有关支持类型的列表,请参阅 QVariantAnimation 类描述)。

另请参阅 QEasingCurve.

QVariant QVariantAnimation::keyValueAt(qreal step) const

返回给定 step 的关键帧值。所给的 step 必须在 0 到 1 的范围内。如果没有 KeyValuestep,则返回一个无效的 QVariant

另请参阅 keyValues() 和 setKeyValueAt().

QVariantAnimation::KeyValues QVariantAnimation::keyValues() const

返回此动画的关键帧。

另请参阅keyValueAt() 和 setKeyValues()。

void QVariantAnimation::setKeyValueAt(qreal step, const QVariant &value)

在给定的 step 处创建一个具有给定 value 的关键帧。给定的 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 每当当前值更改时发出此信号。

注意:属性 currentValue 的通知器信号。

另请参阅currentValuestartValueendValue

相关的非成员函数

template <typename T> void qRegisterAnimationInterpolator(QVariant (*)(const T &, const T &, qreal) func)

为模板类型 T 注册一个自定义插值器 func。插值器必须在动画构建之前注册。要注销(并使用默认插值器),请将 func 设置为 nullptr

注意:此函数是 线程安全的

© 2024 The Qt Company Ltd. 本文档中包含的文档贡献均为各自所有者的版权。提供的文档根据自由软件基金会发布的条款,在 GNU自由文档许可协议版本1.3 下授权。Qt及其相关标志是芬兰及世界上其他地区的The Qt Company Ltd.的商标。所有其他商标均为各自所有者的财产。