Qt画波浪球(小费力)
画流动波浪
#ifndef WIDGET3_H
#define WIDGET3_H#include <QWidget>
#include <QtMath>
class widget3 : public QWidget
{Q_OBJECT
public:explicit widget3(QWidget *parent = nullptr);void set_value(int v){value=v;}int get_value(){return value;}
protected:void paintEvent(QPaintEvent *event) override;void timerEvent(QTimerEvent *event) override;
signals:private:double m_water_H=0.2;//振幅系数double m_offset=0;//偏移量int m_updateTime =100;//移动速度int value;
};#endif // WIDGET3_H
#include "widget3.h"
#include <QPainter>
#include <QDebug>
widget3::widget3(QWidget *parent) : QWidget(parent)
{m_updateTime=100;value=30;this->startTimer(m_updateTime);
}void widget3::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::TextAntialiasing, true);//y = A * qSin(ωx + φ) + k//0或100时会有bugdouble h1=height()*(1-(1.0*value/100));//波线的中间点painter.translate(0,h1);m_water_H=0.05;double A=height()*m_water_H;//振幅double T=width()/2;double w=2*M_PI/T;//W=2pi/T,T越大,w越小double k=0;QPainterPath waterPath;double h2=height()-h1;waterPath.moveTo(0,h2);waterPath.lineTo(0,0);if(m_offset == T){m_offset=0;}else{m_offset+=T/10;}for(int x=0;x<=width();x++){double waterY=-(double)(A*sin(w*x+m_offset))+k;waterPath.lineTo(x,waterY);}waterPath.lineTo(width(),h2);painter.setPen(Qt::NoPen);painter.setBrush(QBrush(QColor(166, 196, 255)));painter.drawPath(waterPath);
}void widget3::timerEvent(QTimerEvent *event)
{this->update();
}
QRadialGradient简单使用
void widget2::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform | QPainter::TextAntialiasing, true);double side=fmin(width(),height());QRadialGradient radialGradient(width()/2, height()/2, side, width()/2, height()/2);radialGradient.setColorAt(0,Qt::red);radialGradient.setColorAt(0.5,Qt::blue); //设置50%处的半径为蓝色radialGradient.setColorAt(1,Qt::green);painter.setBrush(radialGradient);painter.drawEllipse((width()-side) / 2, 0, side, side);
}
为球中流动波浪添加渐变效果
QRadialGradient radialGradient(width()/2,height()/2,side/2,width()/2,height()/2);radialGradient.setColorAt(1,QColor(102, 145, 255));radialGradient.setColorAt(0.90,QColor(157, 190, 255));radialGradient.setColorAt(0,QColor(157, 190, 255));painter.setBrush(radialGradient);painter.drawPath(path);
为外层再套上一层渐变效果
void widget3::draw_Circle(QPainter &painter)
{painter.save();//y = A * qSin(ωx + φ) + k//0或100时会有bugqDebug()<<value;double h1=height()*(1-(1.0*value/100));//波线的中间点,value=30,高度为0.7*height()m_water_H=0.05;double A=height()*m_water_H;//振幅double T=width()/2;double w=2*M_PI/T;//W=2pi/T,T越大,w越小double k=0;QPainterPath waterPath;double h2=height()-h1;//这里就是0.3*height()waterPath.moveTo(0,height());waterPath.lineTo(0,h2);if(m_offset == T){m_offset=0;}else{m_offset+=T/10;}for(int x=0;x<=width();x++){double waterY=-(double)(A*sin(w*x+m_offset))+k;waterPath.lineTo(x,waterY+h1);}waterPath.lineTo(width(),height());QPainterPath bigPath;double side=fmin(width(),height());painter.setPen(Qt::NoPen);painter.setBrush(QBrush(QColor(255,255,255)));painter.drawEllipse(width()/2-side*0.45,height()/2-side*0.45,side*0.9,side*0.9);bigPath.addEllipse(width()/2-side*0.45,height()/2-side*0.45,side*0.9,side*0.9);//新路径,用大路径减去波浪区域的路径,形成遮罩效果QPainterPath path;//圆的部分与波浪的部分结合path = bigPath.intersected(waterPath);painter.setPen(Qt::NoPen);//r=0.5side,r1=0.45side//r1*0.9=0.45side*0.9=0.5side*0.81QRadialGradient radialGradient1(width()/2,height()/2,side/2,width()/2,height()/2);radialGradient1.setColorAt(1,QColor(235, 243, 255));radialGradient1.setColorAt(0.81,QColor(255,255,255));radialGradient1.setColorAt(0,QColor(255,255,255));painter.setBrush(radialGradient1);painter.drawEllipse(width()/2-side/2,height()/2-side/2,side,side);QRadialGradient radialGradient(width()/2,height()/2,side*0.45,width()/2,height()/2);radialGradient.setColorAt(1,QColor(102, 145, 255));radialGradient.setColorAt(0.90,QColor(157, 190, 255));radialGradient.setColorAt(0,QColor(157, 190, 255));painter.setBrush(radialGradient);painter.drawPath(path);painter.restore();
}
画文字
void widget3::drawText1(QPainter &painter,QString text)
{painter.save();double x_center,y_center;x_center=width()/2;y_center=height()/2;painter.translate(x_center,y_center);QFont font;font.setPointSize(15);font.setFamily("方正粗黑宋简体");painter.setFont(font);QPen pen;pen.setColor(QColor(0,0,0));painter.setPen(pen);painter.drawText(-100,-50,200,50,Qt::AlignCenter,text);painter.restore();
}void widget3::drawText2(QPainter &painter, QString text)
{painter.save();double x_center,y_center;x_center=width()/2;y_center=height()/2;painter.translate(x_center,y_center);QFont font;font.setPointSize(10);painter.setFont(font);QPen pen;pen.setColor(QColor(97, 99, 102));painter.setPen(pen);painter.drawText(-100,0,200,50,Qt::AlignCenter,text);painter.restore();
}
注释:一些细节需要自己去调整参数
相关文章:

Qt画波浪球(小费力)
画流动波浪 #ifndef WIDGET3_H #define WIDGET3_H#include <QWidget> #include <QtMath> class widget3 : public QWidget {Q_OBJECT public:explicit widget3(QWidget *parent nullptr);void set_value(int v){valuev;}int get_value(){return value;} protecte…...

监控Kubernetes Node组件的关键指标
所有的 Kubernetes 组件,都提供了 /metrics 接口用来暴露监控数据,Kube-Proxy 也不例外。通过 ss 或者 netstat 命令可以看到 Kube-Proxy 监听的端口,一个是 10249,用来暴露监控指标,一个是 10256 ,作为…...
Mysql之优化-主从复制
1、索引优化 (1)性能下降,执行、等待时间长:数据过多—》分库分表,关联太多,索引未使用,参数调优 (2)索引失效情况:索引列计算或函数等操作,索引…...
编程之道:构建优雅可维护代码的基石
编程世界犹如一座庞大的建筑群,而代码构建块则是这座建筑的基石。类比于建筑学中的基础构件,代码构建块是软件开发过程中不可或缺的元素。本文将深入探讨代码构建块的概念以及其在编写高质量代码方面的重要性。 什么是代码构建块? 在软件开发…...

十大经典排序算法
目录 前言 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 计数排序 桶排序 基数排序 十大排序之间的比较 总结 前言 学了数据结构之后一直没有进行文字性的总结,现在趁着还有点时间把相关排序的思路和代码实现来写一下。概念的话网上…...

Linux6.37 Kubernetes 集群调度
文章目录 计算机系统5G云计算第三章 LINUX Kubernetes 集群调度一、调度约束1.调度过程2.指定调度节点3.亲和性1)节点亲和性2)Pod 亲和性3)键值运算关系 4.污点(Taint) 和 容忍(Tolerations)1)污点(Taint)2)容忍(Toler…...
记录一次前端input中的值为什么在后端取不到值
前端源码: <input type"text" name"user" placeholder"请输入你的名字" class"layui-input" value"{{ username}}" size"50" disabled"true"> 后端源码: send_name req…...

Apipost接口自动化控制器使用详解
测试人员在编写测试用例以及实际测试过程中,经常会遇到两个棘手的问题: •稍微复杂一些的自动化测试逻辑,往往需要手动写代码才能实现,难以实现和维护 •测试用例编写完成后,需要手动执行,难以接入自动化体…...

Leaflet入门,Leaflet如何自定义版权信息,以vue2-leaflet修改自定义版权为例
前言 本章讲解使用Leaflet的vue2-leaflet或者vue-leaflet插件来实现自定义版权信息的功能。 # 实现效果演示 见图片右下角版权信息 vue如何使用Leaflet vue2如何使用:《Leaflet入门,如何使用vue2-leaflet实现vue2双向绑定式的使用Leaflet地图,以及初始化后拿到leaflet对象…...

【AI】p54-p58导航网络、蓝图和AI树实现AI随机移动和跟随移动、靠近玩家挥拳、AI跟随样条线移动思路
p54-p58导航网络、蓝图和AI树实现AI随机移动和跟随移动、靠近玩家挥拳、AI跟随样条线移动思路 p54导航网格p55蓝图实现AI随机移动和跟随移动AI Move To(AI进行移动)Get Random Pointln Navigable Radius(获取可导航半径内的随机点)…...

mysql事务隔离级别详细讲解
mysql事务讲解 MySQL事务处理(TransAction) 大家好,我是一名热爱研究技术并且喜欢自己亲手实践的博主。 工作这么多年,一直没有深入理解MySQL的事务,因为最近也在面试,准备复习mysql的相关知识࿰…...

如何利用 EMC 模型解决能源服务提供商的瓶颈
01. 什么是合同能源管理? 合同能源管理(EMC-Energy Management Contract) 是一种新型的市场化节能机制,其实质就是以减少的能源费用来支付节能项目全部成本的节能投资方式。:节能服务公司与用能单位以契约形式约定节能项目的节能目标,节能服…...
C#--StringComparison枚举值解析
StringComparison 枚举值是在 C# 中用于指定字符串比较规则的枚举类型。它提供了不同的选项,以满足不同的比较需求。下面是 StringComparison 枚举值的解析: StringComparison.CurrentCulture:使用当前线程的区域设置(Culture&am…...

adb对安卓app进行抓包(ip连接设备)
adb对安卓app进行抓包(ip连接设备) 一,首先将安卓设备的开发者模式打开,提示允许adb调试 二,自己的笔记本要和安卓设备在同一个网段下(同连一个WiFi就可以了) 三,在笔记本上根据i…...

【EI复现】考虑区域多能源系统集群协同优化的联合需求侧响应模型(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

日常BUG —— Java判空注解
😜作 者:是江迪呀✒️本文关键词:日常BUG、BUG、问题分析☀️每日 一言 :存在错误说明你在进步! 一. 问题描述 问题一: 在使用Java自带的注解NotNull、NotEmpty、NotBlank时报错,…...

【基础类】—前端算法类
一、排序 1. 排序方法列表 2. 常见排序方法 快速排序选择排序希尔排序 二、堆栈、队列、链表 堆栈、队列、链表 三、递归 递归 四、波兰式和逆波兰式 理论源码...

中国信通院腾讯安全发布《2023数据安全治理与实践白皮书》
导读 腾讯科技(深圳)有限公司和中国信息通信研究院云计算与大数据研究所共同编制了本报告。本报告提出了覆盖组织保障、管理流程、技术体系的以风险为核心的数据安全治理体系,并选取了云场景、互娱、社交等场景,介绍相应场景下数据安全治理实践路线及主…...
linux下用脚本将目录内的文件分类到各自的创建年份(如2023)或年月份(如2023/202308)目录内
第一个if判断语句中判定只有是文件的时候才执行mv操作,并忽略一些特定 第二个if判断目录不存在时创建目录 最后mv文件到目录内 脚本执行前目录内容: 2022-01-file 2023-02-file 脚本执行后目录内容: 2022 |2022-01-file 2023 |2023-02-file …...

新手如何快速学习单片机?
初步确定学习目标:是学习简单便宜的51呢,还是学习简单但是性价比已经不算太高的,但是功能强大稳定可靠的avr,还是物美价廉的stm32,或者ARM9(可以跑系统了),再往上x86什么的如果是学8…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...