QPropertyAnimation Class

QPropertyAnimation 类为 Qt 属性提供动画效果。更多

头文件: #include <QPropertyAnimation>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
继承: QVariantAnimation

属性

公共函数

QPropertyAnimation(QObject *parent = nullptr)
QPropertyAnimation(QObject *target, const QByteArray &propertyName, QObject *parent = nullptr)
virtual ~QPropertyAnimation()
QBindable<QByteArray> bindablePropertyName()
QBindable<QObject *> bindableTargetObject()
QByteArray propertyName() const
void setPropertyName(const QByteArray &propertyName)
void setTargetObject(QObject *target)
QObject *targetObject() const

重新实现的受保护函数

virtual bool event(QEvent *event) override
virtual void updateCurrentValue(const QVariant &value) override
virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) override

详细说明

QPropertyAnimation 对Qt 属性进行插值。由于属性值存储在QVariants 中,因此该类继承于QVariantAnimation ,并支持与其超类相同的动画meta types

声明属性的类必须是QObject 。要使属性动画成为可能,它必须提供一个设置器(以便 QPropertyAnimation 可以设置属性值)。请注意,这使得 Qt 的许多 Widgets 都能实现动画效果。让我们来看一个例子:

#include <QApplication>
#include <QPushButton>
#include <QPropertyAnimation>

class MyButtonWidget : public QWidget
{
public:
    MyButtonWidget(QWidget *parent = nullptr);
};

MyButtonWidget::MyButtonWidget(QWidget *parent) : QWidget(parent)
{
    QPushButton *button = new QPushButton(tr("Animated Button"), this);
    QPropertyAnimation *anim = new QPropertyAnimation(button, "pos", this);
    anim->setDuration(10000);
    anim->setStartValue(QPoint(0, 0));
    anim->setEndValue(QPoint(100, 250));
    anim->start();
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyButtonWidget buttonAnimWidget;
    buttonAnimWidget.resize(QSize(800, 600));
    buttonAnimWidget.show();
    return a.exec();
}

注: 您还可以在启动动画时选择delete policy 来控制动画的生命周期。

属性名称和应被动画化的属性的QObject 实例被传递给构造函数。然后,您可以指定属性的起始值和结束值。该过程同样适用于您自己实现的类中的属性--只需向QVariantAnimation 确认您的QVariant 类型是否受支持即可。

QVariantAnimation 类说明详细解释了如何设置动画。但请注意,如果没有设置起始值,属性将从创建 QPropertyAnimation 实例时的值开始。

QPropertyAnimation 本身的工作原理非常简单。对于包含多个对象的复杂动画,QAnimationGroup 。动画组是一个可以包含其他动画的动画,并且可以管理其动画的播放时间。请查看QParallelAnimationGroup 以了解示例。

另请参阅 QVariantAnimationQAnimationGroup《动画框架》

属性文档

[bindable] propertyName : QByteArray

注: 该属性支持QProperty 绑定。

此属性用于保存此动画的目标属性名称。

此属性定义了此动画的目标属性名称。该属性名是动画运行所必需的。

[bindable] targetObject : QObject*

注: 该属性支持QProperty 绑定。

此属性保存此动画的目标QObject

此属性定义了此动画的目标QObject

成员函数文档

QPropertyAnimation::QPropertyAnimation(QObject *parent = nullptr)

构造一个 QPropertyAnimation 对象。parent 传递给QObject 的构造函数。

QPropertyAnimation::QPropertyAnimation(QObject *target, const QByteArray &propertyName, QObject *parent = nullptr)

构造一个 QPropertyAnimation 对象。parent 传递给QObject 的构造函数。动画会改变target 上的属性propertyName 。默认持续时间为 250ms。

另请参阅 targetObjectpropertyName

[virtual noexcept] QPropertyAnimation::~QPropertyAnimation()

销毁QPropertyAnimation 实例。

[override virtual protected] bool QPropertyAnimation::event(QEvent *event)

重实现:QVariantAnimation::event(QEvent *event).

[override virtual protected] void QPropertyAnimation::updateCurrentValue(const QVariant &value)

重实现:QVariantAnimation::updateCurrentValue(常量 QVariant &value)。

每当当前值发生变化时,QVariantAnimation 就会调用此虚函数。value 是更新后的新值。它更新目标对象上属性的当前值。

另请参阅 currentValuecurrentTime

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

重实现:QVariantAnimation::updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)。

如果动画状态从 Stopped 变为 Running 时未定义 startValue,则当前属性值将用作动画的初始值。

© 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.