当前位置:   article > 正文

(QT)属性动画_qpropertyanimation 旋转

qpropertyanimation 旋转

目录

一、QPropertyAnimation

1、概念

2、使用示例

二、Q_PROPERTY自定义属性动画

1、概念

2、使用


一、QPropertyAnimation

1、概念

QPropertyAnimation是Qt框架中的一个类,用于在给定时间间隔内对QObject的属性进行动画化的平滑过渡。可以使用QPropertyAnimation实现各种动画效果,如淡入淡出、位移、旋转等。

②QPropertyAnimation使用setStartValue()和setEndValue()方法指定动画的起始值和结束值,使用setDuration()方法指定动画持续的时间,使用setEasingCurve()方法指定动画的缓动曲线。调用start()方法开始动画。

③QPropertyAnimation也可以使用setValue()方法手动设置动画的当前值。此外,QPropertyAnimation还提供了一些信号,如valueChanged()和finished(),可用于处理动画过程中的事件。


2、使用示例

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. #include <QGraphicsColorizeEffect>
  4. #include <QGraphicsOpacityEffect>
  5. Widget::Widget(QWidget *parent)
  6. : QWidget(parent)
  7. , ui(new Ui::Widget)
  8. {
  9. ui->setupUi(this);
  10. /**********××××××××××××××× 几何动画 ××××××××××××××************/
  11. //几何属性动画初始化 目标 属性
  12. propertyAnimation = new QPropertyAnimation(ui->geometry,"geometry");
  13. //设置动画起始值 QRect(int left, int top, int width, int height)
  14. propertyAnimation->setStartValue(QRect(0,0,100,100));
  15. //设置某个时间段值
  16. propertyAnimation->setKeyValueAt(0.25,QRect(600,0,100,100));
  17. propertyAnimation->setKeyValueAt(0.50,QRect(600,400,200,200));
  18. propertyAnimation->setKeyValueAt(0.75,QRect(0,400,300,300));
  19. propertyAnimation->setEndValue(QRect(0,0,400,400));//设置结束值
  20. propertyAnimation->setDuration(5000);//设置动画时长
  21. propertyAnimation->setLoopCount(1);//设置动画循环周期
  22. propertyAnimation->setEasingCurve(QEasingCurve::InOutQuad);//设置动画的缓和曲线(动画曲线)
  23. /**********××××××××××××××××× 颜色动画 ×××××××××××××××************/
  24. QGraphicsColorizeEffect *graphicsColorizeEffect=new QGraphicsColorizeEffect(this);
  25. ui->color->setGraphicsEffect(graphicsColorizeEffect);
  26. propertyAnimation1 = new QPropertyAnimation(graphicsColorizeEffect,"color");
  27. propertyAnimation1->setStartValue(QColor(Qt::blue));
  28. propertyAnimation1->setKeyValueAt(0.50,QColor(Qt::green));
  29. propertyAnimation1->setEndValue(QColor(Qt::red));
  30. propertyAnimation1->setDuration(3000);
  31. /**********××××××××××××××××× 不透明度动画 ×××××××××××××××************/
  32. QGraphicsOpacityEffect *graphicsOpacityEffect=new QGraphicsOpacityEffect(this);
  33. ui->opacity->setGraphicsEffect(graphicsOpacityEffect);
  34. propertyAnimation2 = new QPropertyAnimation(graphicsOpacityEffect,"opacity");
  35. propertyAnimation2->setStartValue(1.0);
  36. propertyAnimation2->setKeyValueAt(0.5,0.0);//setKeyValueAt(关键帧,透明度)
  37. propertyAnimation2->setEndValue(1.0);
  38. propertyAnimation2->setDuration(3000);
  39. }
  40. Widget::~Widget()
  41. {
  42. delete ui;
  43. }
  44. void Widget::on_pushButton_clicked()
  45. {
  46. propertyAnimation->start();
  47. }
  48. void Widget::on_pushButton_2_clicked()
  49. {
  50. propertyAnimation1->start();
  51. }
  52. void Widget::on_pushButton_3_clicked()
  53. {
  54. propertyAnimation2->start();
  55. }

二、Q_PROPERTY自定义属性动画

1、概念

Q_PROPERTY是Qt框架中的一个宏,用于将C++类中的成员变量(即属性)声明为Qt属性,以便在Qt框架中使用。使用Q_PROPERTY宏,可以在C++类中定义一个属性,然后将其与Qt的元对象系统(Meta-Object System)相关联。这使得该属性可以通过Qt框架中的信号和槽机制进行访问和修改,还可以使用Qt的属性系统进行序列化和反序列化。

2、使用

2.1 自定义类

rich.h

  1. #ifndef RICH_H
  2. #define RICH_H
  3. #include <QWidget>
  4. namespace Ui {
  5. class Rich;
  6. }
  7. class Rich : public QWidget
  8. {
  9. Q_OBJECT
  10. Q_PROPERTY(qreal money READ money WRITE setMoney)
  11. public:
  12. explicit Rich(QWidget *parent = nullptr);
  13. ~Rich();
  14. qreal money() const;
  15. void setMoney(qreal m);
  16. private:
  17. Ui::Rich *ui;
  18. qreal richMoney;
  19. };
  20. #endif // RICH_H

rich.c

  1. #include "rich.h"
  2. #include "ui_rich.h"
  3. Rich::Rich(QWidget *parent) :
  4. QWidget(parent),
  5. ui(new Ui::Rich)
  6. //richMoney(500)
  7. {
  8. ui->setupUi(this);
  9. }
  10. Rich::~Rich()
  11. {
  12. delete ui;
  13. }
  14. qreal Rich::money() const
  15. {
  16. return richMoney;
  17. }
  18. void Rich::setMoney(qreal m)
  19. {
  20. //richMoney+=m;
  21. richMoney=m;
  22. ui->label->setText(QString::number(richMoney)+"W");
  23. }

2.2 widget.cpp

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. #include <QDebug>
  4. #include <QPropertyAnimation>
  5. Widget::Widget(QWidget *parent)
  6. : QWidget(parent)
  7. , ui(new Ui::Widget)
  8. {
  9. ui->setupUi(this);
  10. rich=new Rich(this);
  11. //rich->setProperty("money",200);//会自动调用WRITE方法
  12. qDebug()<<rich->money()<<endl;
  13. QPropertyAnimation *propertyAnimation=new QPropertyAnimation(rich,"money",this);
  14. propertyAnimation->setStartValue(100);
  15. propertyAnimation->setEndValue (600);
  16. propertyAnimation->setDuration(10000);
  17. propertyAnimation->setEasingCurve(QEasingCurve::Linear);
  18. propertyAnimation->start();
  19. }
  20. Widget::~Widget()
  21. {
  22. delete ui;
  23. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/81380
推荐阅读
相关标签
  

闽ICP备14008679号