Qt之QPropertyAnimation
简述
QPropertyAnimation类定义了Qt的属性动画。
QPropertyAnimation以Qt属性做差值,作为属性值存储在QVariants中,该类继承自QVariantAnimation,并支持基类相同的元类型动画。
声明属性的类必须是一个QObject,为了能够让属性可以用做动画效果,必须提供一个setter(这样,QPropertyAnimation才可以设置属性的值)。注意:这能够使它让许多Qt控件产生动画效果。
- 简述
- 详细描述
- 公共函数
- 示例
- 原始属性
- 效果
- 源码
- 自定义属性
- 效果
- 源码
- 原始属性
- 更多参考
详细描述
来看一个示例:
QPropertyAnimation *animation = new QPropertyAnimation(myWidget, "geometry");
animation->setDuration(10000);
animation->setStartValue(QRect(0, 0, 100, 30));
animation->setEndValue(QRect(250, 250, 100, 30));animation->start();
首先,我们通过构造函数创建一个QPropertyAnimation对象,其中myWidget表示动画作用的QObject对象,geometry则表示QObject的属性。然后,可以指定属性的开始值和结束值。此过程等于在你自己的类中实现了自定义属性 - 需要用QVariantAnimation检测你自定义的QVariant类型是否支持。
QVariantAnimation类详细的描述了如何设置动画。需要注意的是:如果没有设置起始值,在QPropertyAnimation实例被创建时,属性就会设置起始值为它有的值。
QPropertyAnimation就其本身而言非常奏效。对于复杂的动画,例如:包含多个对象,则可以使用QAnimationGroup,动画组是一个可以包含其它动画的动画,并可以管理动画的播放。可以参考QParallelAnimationGroup的示例。
公共函数
QByteArray propertyName() const
返回动画的目标属性名void setPropertyName(const QByteArray & propertyName)
设置动画的目标属性名void setTargetObject(QObject * target)
设置动画作用的QObject对象QObject * targetObject() const
返回动画作用的QObject对象
示例
原始属性
下面,利用上面讲解的geometry属性,来实现一个动画坐标变化。
效果
源码
QPropertyAnimation *pAnimation = new QPropertyAnimation(m_pLabel, "geometry");
pAnimation->setDuration(1000);
pAnimation->setStartValue(QRect(0, 0, 75, 25));
pAnimation->setEndValue(QRect(200, 130, 75, 25));
pAnimation->setEasingCurve(QEasingCurve::OutBounce); // 缓和曲线风格
connect(pStartButton, SIGNAL(clicked(bool)), pAnimation, SLOT(start()));
自定义属性
通过自定义属性alpha,来使用动画设置标签的样式。
效果
源码
#ifndef MAIN_WINDOW_H
#define MAIN_WINDOW_H...class MainWindow : public CustomWindow
{Q_OBJECTQ_PROPERTY(int alpha READ alpha WRITE setAlpha)public:explicit MainWindow(QWidget *parent = 0);~MainWindow();private:int alpha() const;void setAlpha(const int alpha);private:int m_nAlpha;QLabel *m_pLabel;
};#endif // MAIN_WINDOW_H
#include "main_window.h"MainWindow::MainWindow(QWidget *parent): CustomWindow(parent)
{...QPushButton *pStartButton = new QPushButton(this);pStartButton->setText(QString::fromLocal8Bit("开始动画"));m_pLabel = new QLabel(this);m_pLabel->setText(QString::fromLocal8Bit("一去丶二三里"));m_pLabel->setAlignment(Qt::AlignCenter);m_pLabel->setStyleSheet("color: rgb(0, 160, 230);");QPropertyAnimation *pAnimation = new QPropertyAnimation();pAnimation->setTargetObject(this);pAnimation->setPropertyName("alpha");pAnimation->setDuration(1000);pAnimation->setKeyValueAt(0, 255);pAnimation->setKeyValueAt(0.5, 100);pAnimation->setKeyValueAt(1, 255);pAnimation->setLoopCount(-1); //永远运行,直到stopconnect(pStartButton, SIGNAL(clicked(bool)), pAnimation, SLOT(start()));...
}int MainWindow::alpha() const
{return m_nAlpha;
}void MainWindow::setAlpha(const int alpha)
{m_nAlpha = alpha;QString strQSS = QString("color: rgb(0, 160, 230); background-color: rgba(10, 160, 105, %1);").arg(m_nAlpha);m_pLabel->setStyleSheet(strQSS);
}
O(∩_∩)O~是不是很easy,如果你想要实现更多其它效果,都可以自定义。但一定要注意以下两点:
- 需要用QVariantAnimation检测你自定义的QVariant类型是否支持。
- 声明属性的类必须是一个QObject,必须为属性提供一个setter(这样,QPropertyAnimation才可以设置属性的值)。
更多参考
- Qt之动画框架
- Qt之QSequentialAnimationGroup
- Qt之QParallelAnimationGroup
- Qt之QPauseAnimation
- Qt之窗口动画(下坠、抖动、透明度)
Qt之QPropertyAnimation相关推荐
- 【Qt】 QPropertyAnimation,自定义动画,控件背景色字体色变换
运用QPropertyAnimation实现动画,进行背景色和字体色的黑白变换. [Q tea 原创] 源文件下载地址:https://download.csdn.net/download/scz65 ...
- Qt之QPropertyAnimation实现弹窗动画优化版
#ifndef CPROPERTYANIMATION_H #define CPROPERTYANIMATION_H#include <QWidget> #include<QPrope ...
- Qt之QPropertyAnimation移动动画
#include "cpropertyanimationtest.h" #include "ui_cpropertyanimationtest.h" #incl ...
- Qt属性动画仿真QPropertyAnimation的使用
一.QPropertyAnimation的基本使用 1.常用接口函数 setTargetObject:设置仿真对象 setPropertyName:设置仿真属性的名称, setDuration:设置仿 ...
- Qt之QParallelAnimationGroup
简述 QParallelAnimationGroup类提供动画的并行组. QParallelAnimationGroup - 一个动画容器,当它启动的时候它里面的所有动画也启动,即:并行运行所有动画, ...
- Python实现桌面悬浮窗(显示网速,内存,CPU)
Python实现桌面悬浮窗(显示网速,内存,CPU) 背景介绍 编程环境 UI窗口设计 设置窗口透明与边框 重写鼠标事件,以拖动窗口 实现贴边收起 获取网速,内存,CPU信息 建立QThread线程, ...
- Pyqt5实践:实现快捷方式软件
Pyqt5实践:实现快捷方式软件@TOC 工具准备 Python3.x: Python库:pyqt5 代码展示: 直接贴代码,由于工作繁忙,实在没时间写文档0.0,代码里面都有注释,有不懂评论区问.( ...
- 仿照word的界面的滑动菜单(2)(伸缩下拉框)
这里要做两个处理:1.widget的上浮和下层 2.widget的伸缩动画. 上浮和下层可以通过设置widget的属性来控制: if(isfloating){m_is_floating = tru ...
- Qt 自定义动画属性 QPropertyAnimation
简述 QPropertyAnimation类定义了Qt的属性动画. QPropertyAnimation以Qt属性做差值,作为属性值存储在QVariants中,该类继承自QVariantAnimati ...
最新文章
- MySQL 高频面试题,都在这了
- 如何查看功能的源代码?
- 【机器学习入门到精通系列】无监督学习之K-means
- python sql注入脚本_python打造一个分析网站SQL注入的脚本
- 相机视场角和焦距_按照工业镜头的视场的分类
- 枚举对象注释_如何以及何时使用枚举和注释
- phoenix Explain Plan 翻译
- android intent-filter category,android intent-filter category.DEFAULT
- intellij mysql jdbc_intellij idea java项目中通过JDBC链接mysql
- 计算与推断思维 六、可视化
- 百度利用AI技术8、9月打击超83亿条有害信息
- arsc编辑器手机版_APK编辑器中文版,任意修改你手机中的APP名称、logo!
- OpenCV编译、安装、测试
- oracle数据库plsqldev导出表、表结构的方法
- 程序员小技巧-----如何提升电脑速度
- 图解java虚拟机_分享java虚拟机原理图解
- 使用VUE做的个人简历
- dolphinschedule2.0.5升级dolphinschedule3.1.1
- 【五六七人口普查】省市两级人口受教育情况
- 从Google白皮书看企业安全最佳实践
热门文章
- 利用css完成表格的代码,css 表格(示例代码)
- db2中null和空值的区别_MySQL数据库的表中 NULL和空值 到底有什么区别呢?
- 数据库知识 | 关系型数据库与非关系型数据库小记录
- html5自动旋转图片,HTML5画布旋转图片
- MySQL入门 (一) : 资料库概论与MySQL的安装
- SEO之Google--PageRank优化剖析(一)
- php image 转 data uri 图片 (Image Data URIs with PHP)
- magento 获取类别和子类别 Display Categories and SubCategories in Magento
- Linux 最基本命令应用
- C++——求值顺序例子