`QPropertyAnimation` 是 Qt 中用于属性动画的类,它允许你动画化任何 QObject 的属性。当你使用 `QPropertyAnimation`,你应该注意以下几点:
1. **对象和属性的类型**:
- `QPropertyAnimation` 仅支持继承自 `QObject` 的对象,并且属性必须是可访问的(即具有公共的 setter 和 getter 函数)。
- 属性的类型必须是 Qt 的内建类型或者是通过 `Q_DECLARE_METATYPE` 宏注册过的自定义类型。
2. **属性的可动画性**:
- 不是所有属性都可以动画化。例如,大部分集合属性(如 `QList`, `QVector` 等)通常不能直接动画化。
- `QPropertyAnimation` 主要用于动画化数值和颜色属性。
3. **设置目标对象和属性**:
- 在创建 `QPropertyAnimation` 实例后,需要使用 `setTargetObject()` 方法设置动画的目标对象。
- 使用 `setPropertyName()` 方法设置要动画化的属性的名称。
4. **动画持续时间和值范围**:
- 使用 `setDuration()` 设置动画的持续时间(毫秒)。
- 使用 `setStartValue()` 和 `setEndValue()` 设置属性的起始值和结束值。
5. **启动动画**:
- 使用 `start()` 方法启动动画。
**示例**:
假设你有一个 `QLabel` 对象,你想动画化它的 `geometry` 属性(即其位置和大小)。
```cpp
QLabel *label = new QLabel("Hello, Qt!");
label->setGeometry(100, 100, 100, 30); // 设置初始位置和大小
QPropertyAnimation *animation = new QPropertyAnimation(label, "geometry");
animation->setDuration(1000); // 设置动画持续时间为1秒
animation->setStartValue(QRect(100, 100, 100, 30)); // 初始位置和大小
animation->setEndValue(QRect(200, 200, 200, 60)); // 结束位置和大小
animation->start(); // 启动动画
```
在上述示例中,我们创建了一个 `QPropertyAnimation` 对象,并设置其目标对象为 `label`,属性名称为 "geometry"。然后,我们设置了动画的持续时间、起始值和结束值,并启动了动画。
确保目标对象存在且有效,以及属性名称正确且可动画化,这样才能确保 `QPropertyAnimation` 正常工作。
test 2:
#include <QPropertyAnimation>//旋转特性
//0959
class DiskItem : public QObject,publi