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 是动画框架的一部分。
属性
- propertyName : QByteArray
- targetObject : QObject*
公共函数
| 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 属性进行插值。由于属性值存储在QVariant中,该类继承自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 中的示例。
另请参阅 QVariantAnimation 、QAnimationGroup 以及《动画框架》。
属性文档
[bindable] propertyName : QByteArray
注意:此 属性支持QProperty 绑定。
该属性存储此动画的目标属性名称
此属性定义了该动画的目标属性名称。该属性名称是动画运行的必填项。
访问函数:
| QByteArray | propertyName() const |
| void | setPropertyName(const QByteArray &propertyName) |
[bindable] targetObject : QObject*
注意:此 属性支持QProperty 绑定。
该属性存储此动画的目标QObject 。
此属性定义了此动画的目标QObject 。
访问函数:
| QObject * | targetObject() const |
| void | setTargetObject(QObject *target) |
成员函数文档
QPropertyAnimation::QPropertyAnimation(QObject *parent = nullptr)
创建一个 QPropertyAnimation 对象。将 `parent ` 传递给 `QObject` 的构造函数。
QPropertyAnimation::QPropertyAnimation(QObject *target, const QByteArray &propertyName, QObject *parent = nullptr)
创建一个 QPropertyAnimation 对象。将 `parent ` 传递给 `QObject` 的构造函数。该动画会更改 `target` 上的 `propertyName ` 属性。默认持续时间为 250 毫秒。
另请参阅 targetObject 和propertyName 。
[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(const QVariant &value)。
每当当前值发生变化时,QVariantAnimation 都会调用此虚函数。value 是新的、已更新的值。它会更新目标对象上该属性的当前值,除非动画已被停止。
另请参阅 currentValue 和currentTime 。
[override virtual protected] void QPropertyAnimation::updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)
重写:QVariantAnimation::updateState (QAbstractAnimation::State newState, QAbstractAnimation::State oldState)。
如果动画状态从“已停止”变为“正在运行”时未定义startValue ,则使用当前属性值作为动画的初始值。
© 2026 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.