当前位置:   article > 正文

Qt文档阅读笔记-QPropertyAnimation官方解析及实例

qpropertyanimation

目录

官方解析

博主例子


官方解析

QPropertyAnimation

QPropertyAnimation类为Qt属性提供动画。
QPropertyAnimation类可以修改Qt属性,从而达到动画的效果。这些属性的值存储在QVariants中,所以QPropertyAnimation继承了QvariantAnimation,并且支持他相同元类型的动画,比如他的超类
这个类必须是QObject的派生类。他必须经过一个设置才能使动画效果成为可能(这样的化QPropertyAnimation能够设置属性的值)。注意到这使得Qt小部件(窗口)都能做出动画的形式。举个例子:

  1. QPropertyAnimation *animation = new QPropertyAnimation(myWidget, "geometry");
  2. animation->setDuration(10000);
  3. animation->setStartValue(QRect(0, 0, 100, 30));
  4. animation->setEndValue(QRect(250, 250, 100, 30));
  5. animation->start();


属性名和QObject的实例这属性应该被传递给动画的构造函数。然后你能指定这个属性的开始和结束的指。当你自定义属性的时候实现的效果也是一样的,只要QVariant能支持,QVariantAnimation就能用。
QVariantAnimation类描述了如何去做一个动画的细节。注意,如果start value没有被设置,这个属性会设置一个值,这个值是QPropertyAnimation实例化的时候创建的。
QpropertyAnimation工作的时候是充满魅力的,要想完成一个复杂的动画,要包含几个对象实例,这里把他们放到QAnimationGroup中。一个动画组也是一个动画,这个动画包含了许许多多的动画。当组内的动画运行时他能够管理内部的小动画,查看QParallelAnimationGroup这个例子可以看他如何使用以及管理。
 

博主例子

我们把官方实例完整的实现出来。可以发现QpropertyAnimation和QTimeLine效果有点像,不过还是有区别的,关于QTimeLine可以看本人的这篇博文:https://mp.csdn.net/postedit/81530848

运行截图如下:

源码如下:

widget.h

  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QWidget>
  4. namespace Ui {
  5. class Widget;
  6. }
  7. class Widget : public QWidget
  8. {
  9. Q_OBJECT
  10. public:
  11. explicit Widget(QWidget *parent = 0);
  12. ~Widget();
  13. private:
  14. Ui::Widget *ui;
  15. };
  16. #endif // WIDGET_H

main.cpp

  1. #include "widget.h"
  2. #include <QApplication>
  3. int main(int argc, char *argv[])
  4. {
  5. QApplication a(argc, argv);
  6. Widget w;
  7. w.show();
  8. return a.exec();
  9. }

widget.cpp

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. #include <QPropertyAnimation>
  4. #include <QMetaProperty>
  5. #include <QDebug>
  6. Widget::Widget(QWidget *parent) :
  7. QWidget(parent),
  8. ui(new Ui::Widget)
  9. {
  10. ui->setupUi(this);
  11. QPropertyAnimation *animation=new QPropertyAnimation(ui->pushButton,"minimumSize");
  12. animation->setDuration(10000);
  13. animation->setStartValue(QSize(0,0));
  14. animation->setEndValue(QSize(300,300));
  15. animation->start();
  16. }
  17. Widget::~Widget()
  18. {
  19. delete ui;
  20. }

关于QPushButton的属性可以用下面这种方式获得:

伪代码如下:

  1. for(int i=0;i<ui->pushButton->metaObject()->propertyCount();i++)
  2. qDebug()<<ui->pushButton->metaObject()->property(i).name();

运行截图如下:

后面还有很多,再次不再截图

 

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

闽ICP备14008679号