QPropertyAnimation 几行代码快速制作流畅的动画效果

  • QPropertyAnimation Class 官方英文文档【点击前往
  • QPropertyAnimation Class 中文译文文档【点击前往
 

简介

QPropertyAnimation Class 是一个控制动画效果的类,诞生自 Qt 4.6 版本。 该类继承自 QVarianAnimation,并支持其它基类相同的动画类,例如:QAnimationGroup 动画组类,该类仅支持继承自 QObject 类的窗口部件。

以例代劳

用例子来讲述各个功能,直观,立竿见影。

头文件

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

cpp文件

  1. #include <QPropertyAnimation>
  2. #include "mainwindow.h"
  3. #include "ui_mainwindow.h"
  4. MainWindow::MainWindow(QWidget *parent) :
  5. QMainWindow(parent),
  6. ui(new Ui::MainWindow)
  7. {
  8. ui->setupUi(this);
  9. /*  声明动画类,并将控制对象 this (this一定是继承自QObject的窗口部件)  以及属性名 "geometry" 传入构造函数  */
  10. QPropertyAnimation* animation = new QPropertyAnimation(this, "geometry");
  11. /*  设置动画持续时长为 2 秒钟  */
  12. animation->setDuration(2000);
  13. /*  设置动画的起始状态 起始点 (1,2)  起始大小 (3,4)  */
  14. animation->setStartValue(QRect(1, 2, 3, 4));
  15. /*  设置动画的结束状态 结束点 (100,200)  结束大小 (300,400)  */
  16. animation->setEndValue(QRect(100, 200, 300, 400));
  17. /*  设置动画效果  */
  18. animation->setEasingCurve(QEasingCurve::OutInExpo);
  19. /*  开始执行动画 QAbstractAnimation::DeleteWhenStopped 动画结束后进行自清理(效果就好像智能指针里的自动delete animation) */
  20. animation->start(QAbstractAnimation::DeleteWhenStopped);
  21. }
  22. MainWindow::~MainWindow()
  23. {
  24. delete ui;
  25. }
 
QPropertyAnimation 声明的时候
可以传入的属性分别有  pos(位置)、windowOpacity(透明度)
 
位置示例
 
  1. void OEasyWebNotice::onShow() {
  2. QRect rect = QApplication::desktop()->availableGeometry();
  3. const int &endy = rect.height() - height();
  4. QPropertyAnimation *animation= new QPropertyAnimation(this,"pos");
  5. animation->setDuration(2000);
  6. animation->setStartValue(QPoint(rect.width() - width(), rect.height()));
  7. animation->setEndValue(QPoint(rect.width() - width(), endy));
  8. animation->setEasingCurve(QEasingCurve::OutCubic);
  9. connect(animation, SIGNAL(finished()),
  10. this, SLOT(animationFinished()));
  11. show();
  12. animation->start(QAbstractAnimation::DeleteWhenStopped);
  13. }
 
透明度示例
 
  1. void OEasyWebNotice::onClose(void) {
  2. disconnect(closeButton_.get(),SIGNAL(clicked()),
  3. this, SLOT(onClose()));
  4. QPropertyAnimation* animation = new QPropertyAnimation(this, "windowOpacity");
  5. animation->setDuration(1000);
  6. animation->setStartValue(1);
  7. animation->setEndValue(0);
  8. animation->setEasingCurve(QEasingCurve::InCirc);
  9. connect(animation, SIGNAL(finished()),
  10. this, SLOT(deleteLater()));
  11. show();
  12. animation->start(QAbstractAnimation::DeleteWhenStopped);
  13. }
 
 

关于 QPropertyAnimation 我为大家推荐一个我写的项目

上一篇:[Leetcode] 104. Maximum Depth of Binary Tree


下一篇:Leetcode Maximum XOR of Two Numbers in an Array