当前位置:   article > 正文

Qt动画之鼠标水滴点击效果_qt鼠标点击特效

qt鼠标点击特效

C++ Qt是一个基于C++语言的跨平台应用程序开发框架,具有丰富的UI组件和API库。Qt包括了许多模块,如Qt Core、Qt GUI、Qt Network等,每个模块都提供了一系列的类和函数。Qt还提供了集成开发环境(IDE)Qt Creator,使得开发人员可以通过它来创建、编译、调试和部署Qt应用程序。 

学习Qt开发不知道做什么?我为大家整理的这些领域都涉及到Qt开发:嵌入式领域、桌面端开发、移动端、微控制器MCU、客户端(游戏、直播等等)、汽车领域行业、 消费类电子设备、医疗领域行业、工业自动化领域等等

一、简述

 

前几天在群里看见有个小伙伴用的一款gif录屏软件有一个类似水滴的点击效果。于是想了想,便开始了Code。思路也很简单,就是借助Qt的动画类QVariantAnimation然后不断重绘达到点击的动画效果,先看一下效果图。

二、代码之路

WaterDrop.h

  1. #include <QtWidgets/QWidget>
  2. #include <QVariantAnimation>
  3. class WaterDrop : public QWidget
  4. {
  5. Q_OBJECT
  6. public:
  7. WaterDrop(QWidget *parent = Q_NULLPTR);
  8. ~WaterDrop();
  9. void show();
  10. void move(const QPoint &point);
  11. void setColor(QColor color);
  12. private:
  13. void paintEvent(QPaintEvent *event);
  14. public slots:
  15. void onRaduisChanged(QVariant value);
  16. private:
  17. QVariantAnimation* m_waterDropAnimation;
  18. // 水滴变化的半径;
  19. int m_animationRadius;
  20. // 水滴的颜色;
  21. QColor m_waterDropColor;
  22. };

Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件QT6,C++语言基础,qt基础编程,qt软件开发,Qt架构设计,qt布局管理器,qt嵌入式开发,qt编程入门,qt数据库编程,qt跨平台框架,QT项目实战,Quick模块,OpenCV,Qt实战,OpenCV教程,QT界面开发,Qt框架,C++数据结构,Qt线程,桌面应用开发,qt桌面应用开发,Socket网络编程,qt开发工程师,qt开发,应用程序开发框架,图形视图框架,数据库编程,Qt开发编程,Qt开发控件,Qt开发工程师,QT开发必备技能栈,qt编码,qt网络编程,qt网络通信,Qt信号,Qt槽机制,qt字符串,qt数据类型,qt容器,qt客户端开发,qt软件工程师,qt页面绘制

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

WaterDrop.cpp

  1. #include "WaterDrop.h"
  2. #include <QPainter>
  3. // 水滴的半径;
  4. #define WATER_DROP_RADIUS 15
  5. WaterDrop::WaterDrop(QWidget *parent)
  6. : QWidget(parent)
  7. , m_waterDropAnimation(NULL)
  8. , m_animationRadius(0)
  9. , m_waterDropColor(QColor(255, 120, 0, 150)) // 默认为橘黄色;
  10. {
  11. this->setFixedSize(QSize(WATER_DROP_RADIUS * 2, WATER_DROP_RADIUS *2));
  12. this->setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
  13. this->setAttribute(Qt::WA_TranslucentBackground);
  14. // 控件显示完关闭后自动删除;
  15. this->setAttribute(Qt::WA_DeleteOnClose);
  16. m_waterDropAnimation = new QVariantAnimation(this);
  17. }
  18. WaterDrop::~WaterDrop()
  19. {
  20. }
  21. void WaterDrop::move(const QPoint &point)
  22. {
  23. // 这里要把鼠标点击的点转换为圆心点坐标;
  24. QPoint translatePoint = point - QPoint(WATER_DROP_RADIUS, WATER_DROP_RADIUS);
  25. __super::move(translatePoint);
  26. }
  27. void WaterDrop::show()
  28. {
  29. QWidget::show();
  30. // 通过动画类不断进行重绘;
  31. m_waterDropAnimation->setStartValue(0);
  32. m_waterDropAnimation->setEndValue(WATER_DROP_RADIUS);
  33. m_waterDropAnimation->setDuration(350);
  34. connect(m_waterDropAnimation, &QVariantAnimation::valueChanged, this, &WaterDrop::onRaduisChanged);
  35. connect(m_waterDropAnimation, &QVariantAnimation::finished, this, &WaterDrop::close);
  36. m_waterDropAnimation->start();
  37. }
  38. // 设置水滴的颜色;
  39. void WaterDrop::setColor(QColor color)
  40. {
  41. m_waterDropColor = color;
  42. }
  43. // 绘制鼠标的水滴点击效果;
  44. void WaterDrop::paintEvent(QPaintEvent *event)
  45. {
  46. QPainter painter(this);
  47. painter.setRenderHint(QPainter::Antialiasing);
  48. painter.setPen(Qt::NoPen);
  49. painter.setBrush(QBrush(m_waterDropColor));
  50. // 思路就是先绘制一个固定大小的圆A,然后绘制同一圆心的透明的圆B,然后通过动画类是圆B的半径从0增长到WATER_DROP_RADIUS,以致覆盖固定的圆A;
  51. QPainterPath waterDropPath;
  52. waterDropPath.addEllipse(QPoint(WATER_DROP_RADIUS, WATER_DROP_RADIUS), WATER_DROP_RADIUS, WATER_DROP_RADIUS);
  53. QPainterPath hidePath;
  54. hidePath.addEllipse(QPoint(WATER_DROP_RADIUS, WATER_DROP_RADIUS), m_animationRadius, m_animationRadius);
  55. waterDropPath -= hidePath;
  56. painter.drawPath(waterDropPath);
  57. }
  58. void WaterDrop::onRaduisChanged(QVariant value)
  59. {
  60. // 不断增加圆B的半径值,并重绘;
  61. m_animationRadius = value.toInt();
  62. update();
  63. }

Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件QT6,C++语言基础,qt基础编程,qt软件开发,Qt架构设计,qt布局管理器,qt嵌入式开发,qt编程入门,qt数据库编程,qt跨平台框架,QT项目实战,Quick模块,OpenCV,Qt实战,OpenCV教程,QT界面开发,Qt框架,C++数据结构,Qt线程,桌面应用开发,qt桌面应用开发,Socket网络编程,qt开发工程师,qt开发,应用程序开发框架,图形视图框架,数据库编程,Qt开发编程,Qt开发控件,Qt开发工程师,QT开发必备技能栈,qt编码,qt网络编程,qt网络通信,Qt信号,Qt槽机制,qt字符串,qt数据类型,qt容器,qt客户端开发,qt软件工程师,qt页面绘制 

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

测试代码

  1. // 新建一窗口类,重写mousePressEvent事件即可;
  2. void MyWidget::mousePressEvent(QMouseEvent *event)
  3. {
  4. QPoint cursorPos = event->pos();
  5. qDebug() << "mousePressEvent" << cursorPos;
  6. WaterDrop* waterDrop = new WaterDrop();
  7. waterDrop->move(this->mapToGlobal(cursorPos));
  8. waterDrop->setColor(Qt::green);
  9. waterDrop->show();
  10. }

Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件QT6,C++语言基础,qt基础编程,qt软件开发,Qt架构设计,qt布局管理器,qt嵌入式开发,qt编程入门,qt数据库编程,qt跨平台框架,QT项目实战,Quick模块,OpenCV,Qt实战,OpenCV教程,QT界面开发,Qt框架,C++数据结构,Qt线程,桌面应用开发,qt桌面应用开发,Socket网络编程,qt开发工程师,qt开发,应用程序开发框架,图形视图框架,数据库编程,Qt开发编程,Qt开发控件,Qt开发工程师,QT开发必备技能栈,qt编码,qt网络编程,qt网络通信,Qt信号,Qt槽机制,qt字符串,qt数据类型,qt容器,qt客户端开发,qt软件工程师,qt页面绘制

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

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

闽ICP备14008679号