Qt中得动画类

目录

1. 简介

QPropertyAnimation是QT中的一个动画类,用于对目标对象的属性进行动画效果展示。该类继承自QAbstractAnimation类,使用起来非常方便和灵活。

2. QPropertyAnimation类介绍

QPropertyAnimation可以对任何QObject的子类的属性进行动画的展示,只要该属性是可写的,即存在set方法。QPropertyAnimation支持多种类型的属性,例如整型,浮点型,颜色等。要使用QPropertyAnimation,需要创建一个QPropertyAnimation对象,并通过setTargetObject方法将要动画显示的对象设置为目标对象,通过setPropertyName方法设置要动画显示对象的属性名。

可以使用QVariant类型的setStartValue()和setEndValue()方法设置动画的起始值和结束值,也可以设置一个QValueSource类型的值源作为动画的值,通过setStartValueSource()和setEndValueSource()方法设置动画的值源。

调用start函数开始执行动画,QPropertyAnimation能够自动计算动画的时间,执行时间和动画的重复次数等等。可以通过信号和槽机制来监测动画的进度和状态,例如valueChanged()信号可以获得动画实时的数值。

3. QPropertyAnimation使用例子

  • 3.1 QPropertyAnimation修改QPushButton的pos属性

    这里给出平移一个按键的动画例子:
    下面的代码主要就是使用QPropertyAnimation来修改QPushButton类中的pos属性值让按键实现平移的效果。
    
    • 3.1.1 创建QPushButton对象,并设置其初始位置
      QPushButton *pushButton = new QPushButton("Click me", this);
      pushButton->setGeometry(50, 50, 100, 40);
      
    • 3.1.2 创建QPropertyAnimation对象,并设置变化的属性、持续时间、起始值和结束值
      QPropertyAnimation *animation = new QPropertyAnimation(pushButton, "pos");
      animation->setDuration(1000); // 设置动画持续时间为1秒
      animation->setStartValue(QPoint(50,50)); // 设置起始位置为(50,50)
      animation->setEndValue(QPoint(200, 50)); // 设置结束位置为(200,50),即向右平移150像素
      
    • 3.1.3 启动动画
      animation->start();
      
    • 3.1.4 完整的示例代码如下:
      QPushButton *pushButton = new QPushButton("Click me", this);
      pushButton->setGeometry(50, 50, 100, 40);
      
      QPropertyAnimation *animation = new QPropertyAnimation(pushButton, "pos");
      animation->setDuration(1000); // 设置动画持续时间为1秒
      animation->setStartValue(QPoint(50,50)); // 设置起始位置为(50,50)
      animation->setEndValue(QPoint(200, 50)); // 设置结束位置为(200,50),即向右平移150像素
      
      animation->start(); // 启动动画
      
  • 3.2 QPropertyAnimation修改QPushButton的geometry属性

    上面的第一个代码通过修改pos属性来达到动画的效果,同样的也可以通过修改geometry属性来达到动画的效果。

    QPushButton *pushButton = new QPushButton("Click me", this);
    pushButton->setGeometry(50, 50, 100, 40);
    
    QPropertyAnimation *animation = new QPropertyAnimation(pushButton, "geometry");
    animation->setDuration(1000); // 设置动画持续时间为1秒
    animation->setStartValue(QRect(50, 50, 100, 40)); // 设置起始位置和大小
    animation->setEndValue(QRect(200, 50, 100, 40)); // 设置结束位置和大小,即横向向右平移150像素
    
    animation->start(); // 启动动画
    

4. QPropertyAnimation修改自定义属性

除了修改QWidget和QGraphicsItem之类的内置属性之外,QPropertyAnimation还可以使用自定义属性。

自定义属性方式:

在这里,我们使用了Q_PROPERTY宏来声明自定义属性。这个宏有三个参数:属性名、属性类型和可读可写属性的函数名称。

通过READ和WRITE标识定义两个函数,功能分别是获取自定义属性的值和修改自定义属性的值。
NOTIFY标识一个信号量,当自定义属性发生改变时可以发送这个信号量。

    /*定义一个可读(READ)并且可写(WRITE)的属性,并且可以通过属性名称进行访问*/
    Q_PROPERTY(int endAngle READ endAngle WRITE setEndAngle NOTIFY endAngleChanged)

public:
    int endAngle() const { return m_endAngle; }
    void setEndAngle(const int& endAngle) { m_endAngle = endAngle; update(); }

signals:
    void endAngleChanged(int Angle);

使用:

使用setStartValue可以设置属性的起始值,使用setEndValue设置结束值。

5. 总结

QPropertyAnimation可以让程序动态变得更加生动,提高用户的体验感,是一个非常有用的QT类

  • 29
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值