Qt自定义圆周动画(360 10.0 的模仿作者写的)
由于项目需求,需要把一张图片做圆周运动,用到了属性动画,坐标计算等。
在编写代码的过程中,由于太长时间没用sin,cos函数忘了是用弧度为单位,汗呀
下面把代码贴出来
- /*
- * 圆周运动动画
- * */
- #ifndef CircleAnimationWidget_H
- #define CircleAnimationWidget_H
- #include <QWidget>
- #define PI 3.1415
- class QPropertyAnimation;
- class CircleAnimationWidget : public QWidget
- {
- Q_OBJECT
- //注册属性,用于动画
- Q_PROPERTY(qreal percent READ percent WRITE setPercent)
- public:
- explicit CircleAnimationWidget(QWidget *parent = 0);
- explicit CircleAnimationWidget(const QString &icon, \
- const qreal &radius, QWidget *parent = 0);
- void setCircleInfo(const QString &icon, const qreal &radius);
- void startAnimation();
- void stopAnimation();
- void setPercent(const qreal &per);
- const qreal &percent()
- {
- return m_percent;
- }
- protected:
- void paintEvent(QPaintEvent *);
- private slots:
- //更新坐标值
- void updatePos();
- private:
- //计算坐标值
- QPoint mathPoint();
- QPoint mathPoint(const QPoint ¢erPos, const qreal &percent, const qreal &radius);
- void initAnimation();
- private:
- qreal m_percent;//百分比
- qreal m_radius;//半径
- QPoint m_centerPos;//圆点坐标
- QPropertyAnimation *m_percentAnimation;
- QPixmap m_pix;
- QPoint m_point;//图片坐标
- QPoint m_originPoint;//图片原始坐标
- };
- #endif // CircleAnimationWidget_H
- #include "circleanimationwidget.h"
- #include <QPainter>
- #include <QPropertyAnimation>
- #include <qmath.h>
- CircleAnimationWidget::CircleAnimationWidget(QWidget *parent) :
- QWidget(parent)
- {
- this->setAttribute(Qt::WA_TranslucentBackground);
- }
- CircleAnimationWidget::CircleAnimationWidget(const QString &icon,\
- const qreal &radius, QWidget *parent) : QWidget(parent)
- {
- this->setAttribute(Qt::WA_TranslucentBackground);
- this->setCircleInfo(icon, radius);
- }
- void CircleAnimationWidget::initAnimation()
- {
- m_percentAnimation = new QPropertyAnimation(this, "percent");
- m_percentAnimation->setDuration(2000);
- m_percentAnimation->setStartValue(0.0);
- m_percentAnimation->setEndValue(1.0);
- m_percentAnimation->setLoopCount(-1); //无限循环,只有调用stop才会停止
- }
- void CircleAnimationWidget::startAnimation()
- {
- m_percentAnimation->start();
- }
- void CircleAnimationWidget::stopAnimation()
- {
- m_percentAnimation->stop();
- m_point = m_originPoint;
- m_percent = 0;
- update();
- }
- void CircleAnimationWidget::setCircleInfo(const QString &icon, const qreal &radius)
- {
- m_pix.load(icon);
- m_percent = 0;
- m_radius = radius;
- int pixW = m_pix.width();
- int pixH = m_pix.height();
- m_centerPos.setX(radius);
- m_centerPos.setY(radius);
- m_originPoint.setX(radius*2);
- m_originPoint.setY(radius);
- m_point = m_originPoint;
- this->setFixedSize(pixW + radius*2, pixH + radius*2);
- this->initAnimation();
- }
- void CircleAnimationWidget::setPercent(const qreal &per)
- {
- m_percent = per;
- updatePos();
- }
- void CircleAnimationWidget::updatePos()
- {
- m_point = mathPoint();
- update();
- }
- QPoint CircleAnimationWidget::mathPoint()
- {
- return this->mathPoint(m_centerPos, m_percent, m_radius);
- }
- QPoint CircleAnimationWidget::mathPoint(const QPoint ¢erPos, const qreal &percent, const qreal &radius)
- {
- qreal dx = radius * qCos(percent * ( 2 * PI)) + centerPos.x();//计算x坐标
- qreal dy = radius * qSin(percent * ( 2 * PI)) + centerPos.y(); // 计算y坐标
- return QPoint(dx, dy);
- }
- void CircleAnimationWidget::paintEvent(QPaintEvent *)
- {
- QPainter painter(this);
- painter.drawPixmap(m_point, m_pix);
- }
http://blog.csdn.net/zhjun5337/article/details/40789979
http://www.qtcn.org/bbs/read-htm-tid-57817-page-1.html
Qt自定义圆周动画(360 10.0 的模仿作者写的)的更多相关文章
- paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制
源地址:http://blog.csdn.net/attilax/article/details/12343625 paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制 效果图: ...
- kafka_2.11-0.10.0.1生产者producer的Java实现
转载自:http://blog.csdn.net/qq_26479655/article/details/52555283 首先导入包 将kafka目录下的libs中的jar包导入 用maven建立 ...
- iOS 10.0 更新点(开发者视角)
html, body {overflow-x: initial !important;}html { font-size: 14px; } body { margin: 0px; padding: 0 ...
- ViewPager无限轮播与自定义切换动画
一直在寻求一个能用得长久的ViewPager,寻寻觅觅终于发现,ViewPager有这一个就够了. 注:并非完全原创 先看一下效果: 淡入淡出: 旋转: 无限轮播的ViewPager 主要设计思路(以 ...
- 还在期待安卓9.0吗?Android 10.0要来了
目前,美国 Google公司的 AndroidP (安卓9.0),已经正式全面推出有几个多月了.众多手机品牌厂商也都在积极的进行更新适配 Android 9.0 系统(修改UI界面也算是二次开发,嗯) ...
- Qt 创建按钮动画
1 封装自定义按钮 myPushBttton 2 构造函数 (默认图片,按下后显示图片) 3 测试开始按钮 4 开始制作特效 5 zoom1 向下弹跳 6 zoom2 向上弹跳 代码如下 main.h ...
- 自定义带动画的Toast
一.style样式: 1. // 移动和透明渐变结合的动画 <style name="anim_view"> <item name="@ ...
- Android 自定义波浪动画 --"让进度浪起来~"
原文链接:http://www.jianshu.com/p/0e25a10cb9f5 一款效果不错的动画,实现也挺简单的,推荐阅读学习~ -- 由 傻小孩b 分享 waveview <Andro ...
- Kafka-0.10.0.0入门
搭建环境略(伪集群即可以),但要注意Kafka的配置必须配置的,少配了也一样可以用,但是只能单机使用,外部机器无法连接,网上也有说. host.name=192.168.1.30 advertised ...
随机推荐
- SeekBar.OnSeekBarChangeListener解析
public static interface SeekBar.OnSeekBarChangeListener android.widget.SeekBar.OnSeekBarChangeListen ...
- logstash 利用drop 丢弃过滤日志
input { stdin { } } filter { grok { match => ["message","\s*%{TIMESTAMP_ISO8601}\s ...
- 数据库范式(1NF 2NF 3NF BCNF)详解
数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的.结构明晰的,同时,不会发生插入(insert).删除(delete)和更新(update)操作异常.反之则是乱七八糟,不仅给 ...
- bzoj1148
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1148 很常见的排序贪心题...... 假设我们得到了一个最优序列,记s[n]=w[1]+w[2 ...
- java进阶计划
鉴于自己在java 的学习过程中,像是无头苍蝇一样,东扎一把,西戳一下,没有一个明确的方向,也没有一个比较明确的方面,所以有了这个大致的计划. 计划的目标: 1. java本身的目标 对线程(thre ...
- 新闻:型牌男装:网上订服装,如何将返修率降到5个点以下 | IT桔子
新闻:型牌男装:网上订服装,如何将返修率降到5个点以下 | IT桔子 型牌男装:网上订服装,如何将返修率降到5个点以下
- XSS初体验
主要内容 什么是XSS? XSS的危害有哪些? 常见的XSS漏洞 如何防范XSS? 什么是XSS? 跨站脚本攻击(Cross Site Scripting),是一种 Web 应用程序的漏洞,当来自 ...
- 设计模式之(二)Adapter模式
今天学习Adapter模式,An adapter helps two incompatible interfaces to work together. This is the real world ...
- Oracle—RMAN备份(三)
一.增量备份的相关概念 1. 在前面说明了RMAN的完整备份,完整备份是备份所用使用过的块,不备份没有使用的过的块:增量备份只备份自上次备份以来更改过的块. 2.即使RMAN的默认操作是在增量备份时扫 ...
- Class的生命周期
之前的<JVM类载入机制-ClassLoader>和<初探JVM-ClassLoader源代码>,仅仅是讨论了Class的载入部分,如今来纵观一下整个Class的生命周期. C ...