赞
踩
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
- #include <QtWidgets/QWidget>
- #include <QVariantAnimation>
- class WaterDrop : public QWidget
- {
- Q_OBJECT
- public:
- WaterDrop(QWidget *parent = Q_NULLPTR);
- ~WaterDrop();
- void show();
- void move(const QPoint &point);
- void setColor(QColor color);
- private:
- void paintEvent(QPaintEvent *event);
- public slots:
- void onRaduisChanged(QVariant value);
- private:
- QVariantAnimation* m_waterDropAnimation;
- // 水滴变化的半径;
- int m_animationRadius;
- // 水滴的颜色;
- QColor m_waterDropColor;
- };
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
- #include "WaterDrop.h"
- #include <QPainter>
- // 水滴的半径;
- #define WATER_DROP_RADIUS 15
- WaterDrop::WaterDrop(QWidget *parent)
- : QWidget(parent)
- , m_waterDropAnimation(NULL)
- , m_animationRadius(0)
- , m_waterDropColor(QColor(255, 120, 0, 150)) // 默认为橘黄色;
- {
- this->setFixedSize(QSize(WATER_DROP_RADIUS * 2, WATER_DROP_RADIUS *2));
- this->setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
- this->setAttribute(Qt::WA_TranslucentBackground);
- // 控件显示完关闭后自动删除;
- this->setAttribute(Qt::WA_DeleteOnClose);
- m_waterDropAnimation = new QVariantAnimation(this);
- }
- WaterDrop::~WaterDrop()
- {
- }
- void WaterDrop::move(const QPoint &point)
- {
- // 这里要把鼠标点击的点转换为圆心点坐标;
- QPoint translatePoint = point - QPoint(WATER_DROP_RADIUS, WATER_DROP_RADIUS);
- __super::move(translatePoint);
- }
- void WaterDrop::show()
- {
- QWidget::show();
- // 通过动画类不断进行重绘;
- m_waterDropAnimation->setStartValue(0);
- m_waterDropAnimation->setEndValue(WATER_DROP_RADIUS);
- m_waterDropAnimation->setDuration(350);
- connect(m_waterDropAnimation, &QVariantAnimation::valueChanged, this, &WaterDrop::onRaduisChanged);
- connect(m_waterDropAnimation, &QVariantAnimation::finished, this, &WaterDrop::close);
- m_waterDropAnimation->start();
- }
- // 设置水滴的颜色;
- void WaterDrop::setColor(QColor color)
- {
- m_waterDropColor = color;
- }
- // 绘制鼠标的水滴点击效果;
- void WaterDrop::paintEvent(QPaintEvent *event)
- {
- QPainter painter(this);
- painter.setRenderHint(QPainter::Antialiasing);
- painter.setPen(Qt::NoPen);
- painter.setBrush(QBrush(m_waterDropColor));
- // 思路就是先绘制一个固定大小的圆A,然后绘制同一圆心的透明的圆B,然后通过动画类是圆B的半径从0增长到WATER_DROP_RADIUS,以致覆盖固定的圆A;
- QPainterPath waterDropPath;
- waterDropPath.addEllipse(QPoint(WATER_DROP_RADIUS, WATER_DROP_RADIUS), WATER_DROP_RADIUS, WATER_DROP_RADIUS);
- QPainterPath hidePath;
- hidePath.addEllipse(QPoint(WATER_DROP_RADIUS, WATER_DROP_RADIUS), m_animationRadius, m_animationRadius);
- waterDropPath -= hidePath;
- painter.drawPath(waterDropPath);
- }
- void WaterDrop::onRaduisChanged(QVariant value)
- {
- // 不断增加圆B的半径值,并重绘;
- m_animationRadius = value.toInt();
- update();
- }
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模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
测试代码
- // 新建一窗口类,重写mousePressEvent事件即可;
- void MyWidget::mousePressEvent(QMouseEvent *event)
- {
- QPoint cursorPos = event->pos();
- qDebug() << "mousePressEvent" << cursorPos;
- WaterDrop* waterDrop = new WaterDrop();
- waterDrop->move(this->mapToGlobal(cursorPos));
- waterDrop->setColor(Qt::green);
- waterDrop->show();
- }
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模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。