QGraphicsView实现简易地图17『涟漪效果』

news2024/9/19 16:48:25

前文链接:QGraphicsView实现简易地图16『爆炸效果』
模仿水波荡漾时的涟漪效果,参考了echarts中的散点图
支持设置散点大小、颜色、涟漪线条宽度。
动态演示效果

静态展示图片
在这里插入图片描述
核心代码

#pragma once
#include "../AbstractGeoItem.h"
#include "DataStruct/GeoData.h"

/*
 * 散点效果-静态
 */

class EffectScatterItem : public AbstractGeoItem
{
public:
	explicit EffectScatterItem(const GeoCoord &geoCoord, int radius, QGraphicsItem *parent = nullptr);
	~EffectScatterItem();

	// 设置百分比(值:0-1)
	void setPercent(double percent);
	// 获取百分比
	double percent();
	// 设置颜色
	void setColor(QColor color);
	// 设置涟漪线宽
	void setRippleWidth(double width);

protected:
	virtual QRectF boundingRect() const override;
	virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;

private:
	int m_radius;			// 半径(单位:像素)
	double m_percent;		// 每条涟漪扩散百分比
	double m_ripplesWidth;	// 涟漪线宽
	QColor m_color;			// 颜色
};
#include "EffectScatterItem.h"
#include <QPainter>

EffectScatterItem::EffectScatterItem(const GeoCoord &geoCoord, int radius, QGraphicsItem *parent /*= nullptr*/)
	: AbstractGeoItem(parent)
{
	setZValue(302);
	setGeoPos(geoCoord.lon, geoCoord.lat);
	m_radius = radius;
	m_percent = 0;
	m_ripplesWidth = 1.5;
	m_color = Qt::white;
}

EffectScatterItem::~EffectScatterItem()
{

}

void EffectScatterItem::setPercent(double percent)
{
	m_percent = percent;
	update();
}

double EffectScatterItem::percent()
{
	return m_percent;
}

void EffectScatterItem::setColor(QColor color)
{
	m_color = color;
	update();
}

void EffectScatterItem::setRippleWidth(double width)
{
	m_ripplesWidth = width;
	update();
}

QRectF EffectScatterItem::boundingRect() const
{
	return QRectF(-m_radius, -m_radius, 2 * m_radius, 2 * m_radius);
}

void EffectScatterItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
	painter->setPen(Qt::NoPen);
	painter->setBrush(m_color);
	painter->setRenderHint(QPainter::Antialiasing);
	painter->drawEllipse(QPointF(0, 0), m_radius * 0.4, m_radius * 0.4);

	painter->setBrush(Qt::NoBrush);

	for (int i = 1; i <= 3; ++i)
	{
		QColor color = m_color;
		color.setAlphaF((4 - i - m_percent) / 3);
		painter->setPen(QPen(color, m_ripplesWidth));
		
		double radius = m_radius * (0.4 + (i - 1 + m_percent) * 0.2);
		painter->drawEllipse(QPointF(0, 0), radius, radius);
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1704363.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniCloud云存储uni-cdn七牛云扩展存储-开发uniapp项目节约开发成本

为什么要使用uniCloud的扩展存储&#xff0c;那就是省钱&#xff0c;而且DCloud也一直在推uni-cdn&#xff0c;我在项目中也使用七牛云的扩展存储&#xff0c;确实是省钱&#xff0c;如果你的项目使用到大量的图片后者音视频&#xff0c;这些的算计可以帮你省不少钱。下面就通过…

md是什么?如何打开md类型的文件?假如使用Typora打开,如何免费激活Typora?

md是什么&#xff1f;如何打开md类型的文件 前言一、md是什么简介常见打开md类型文件的方法使用文本编辑器使用专用Markdown编辑器使用在线Markdown编辑器在浏览器中安装插件打开 二、下载安装Typora三、免费激活Typora激活Typora关闭软件每次启动时的已激活弹窗去除软件左下角…

uniapp 安卓 Pc端真机浏览器调试

下载插件:真机模拟浏览器 1. 安装, 每次启用时使用usb 线连接电脑, 并且打开手机或者POS (调试设备)开发者模式, 比如我的是pos 机 则在系统设置中找到版本号,点击多次就会触发开发者模式 2.打开真机模拟软件,打开后会打开一个浏览器,如果想要模拟google的浏览器则 在浏览器地…

【Mybatis】映射文件获取新增记录的id

我们在讲JDBC的时候讲过在插入新数据值的时候需要获得到自动生成的那个主键id的值 ①获取PreparedStatement的对象的时候 PreparedStatement st conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS ); ②在执行SQL语句后 st.executeUpdate();ResultSet rs st.ge…

git的使用之筛选文件上传到远程服务器仓库

.gitignore 让本地文件有选择上传到远程服务器仓库 下面是linux内核的.gitignore # # NOTE! Dont add files that are generated in specific # subdirectories here. Add them in the ".gitignore" file # in that subdirectory instead. # # NOTE! Please use gi…

Antd Vue项目引入TailwindCss之后出现svg icon下移,布局中的问题解决方案

目录 1. 现象&#xff1a; 2. 原因分析&#xff1a; 3. 解决方案&#xff1a; 写法一&#xff1a;扩展Preflight 写法二&#xff1a; 4. 禁用 Preflight 1. 现象&#xff1a; Antd Vue项目引入TailwindCss之后出现svg icon下移&#xff0c;不能对齐显示的情况&#xff0…

怎么把3d模型旋转加复制---模大狮

在进行3D建模和设计过程中&#xff0c;经常需要对3D模型进行旋转和复制操作&#xff0c;这是设计过程中的常见需求。本文将介绍如何对3D模型进行旋转和复制&#xff0c;帮助读者更好地掌握这一重要的操作技巧。 一、旋转3D模型 在大多数3D建模软件中&#xff0c;旋转3D模型通常…

《java数据结构》--顺序表详解

一.顺序表的概念&#x1f649; &#x1f431;顺序表是一段物理地址连续的储存单元&#xff0c;一次储存数据元素的线性结构。一般情况下采用数组储存&#xff0c;和数组的增删查改类似。 但是顺序表和数组还是有区别的比如&#xff0c;数组按照是否可以扩容可以分为&#xff…

VTK 数据处理:几何操作

VTK 数据处理&#xff1a;几何操作 VTK 数据处理&#xff1a;几何操作实例 1&#xff1a;使用 vtkWarpTo 向指定点发生位移实例 2&#xff1a;使用 vtkWarpVector 按照指定向量发生位移实例 3&#xff1a;使用 vtkDeformPointSet 按照框架变形 VTK 数据处理&#xff1a;几何操作…

系统思考—战略沙盘推演咨询服务

今日与JSTO团队一起学习了《战略沙盘推演咨询服务》。通过沙盘体验&#xff0c;我深刻感受到组织与战略就像一张皮的正反两面。在转型过程中&#xff0c;即使战略非常明确&#xff0c;团队成员由于恐惧和顾虑&#xff0c;往往不愿意挑战新的业务&#xff0c;从而难以实现战略目…

PHP框架 Laravel

现在因为公司需求&#xff0c;需要新开一个Laravel框架的项目&#xff0c;毫无疑问&#xff0c;我又被借调过去了&#xff0c;最近老是被借调&#xff0c;有点阴郁&#xff0c;不过反观来看&#xff0c;这也是好事&#xff0c;又可以复习和巩固一下自己的知识点&#xff0c;接下…

Android 生成正式版密钥库 KeyStore

步骤1&#xff1a;打开生成正式版密钥库设置 点击 Build 菜单&#xff0c;选择 Generate Signed App Bundle or APK&#xff1a; 这是打开后的样子&#xff1a; 步骤2&#xff1a;选择 APK Android App Bundle 是用于上架 Google Play 商店的。 正常情况下选择 APK。 选择…

Rust 程序设计语言学习——常见集合:Vector String Map

Rust 中常见的集合包括 Vector&#xff08;列表&#xff09;、String&#xff08;字符串&#xff09;和 Map&#xff08;键值对&#xff09;。 Vec<T>&#xff0c;也被称为 vector。vector 允许我们在一个单独的数据结构中储存多于一个的值&#xff0c;它在内存中彼此相邻…

Java之Writer类:探索Java中的输出流

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

拿捏数据结构-top_k问题

top_k问题时间复杂度的计算 这里提前说明&#xff0c;时间复杂度的计算的目的是来计算向上调整的更优还是向下调整更优&#xff0c;从肉眼看的话向下调整优于向上调整&#xff0c;接下来我们进行时间复杂度的计算。 此时我们会用到等比数列求和以及裂项相消 如图 首先我们假设求…

【物联网实战项目】STM32C8T6+esp8266/mqtt+dht11+onenet+uniapp

一、实物图 前端uniapp效果图&#xff08;实现与onenet同步更新数据&#xff09; 首先要确定接线图和接线顺序&#xff1a; 1、stm32c8t6开发板连接stlinkv2下载线 ST-LINK V2STM323.3V3.3VSWDIOSWIOSWCLKSWCLKGNDGND 2、ch340串口连接底座&#xff08;注意RXD和TXD的连接方式…

Spring Boot集成shiro之使用redis缓存demo

1.背景 上次发了这篇文章《Spring Boot集成Shiro快速入门Demo》后&#xff0c;有网友“just.blue”后台反馈集成redis有点问题&#xff0c;今天特地把集成过程发出来 2.为什么要使用cache 用来减轻数据库的访问压力&#xff0c;从而提升查询效率。 3.Shiro使用Redis做缓存 …

Go 实现 WebSocket 的双向通信

在Go语言中实现WebSocket的双向通信通常需要使用第三方库&#xff0c;其中 gorilla/websocket 是一个非常流行和广泛使用的库。 1、安装 go get github.com/gorilla/websocket 2、编写WebSocket服务器代码 package mainimport ("fmt""github.com/gorilla/we…

AlibabaCloud(阿里云)支付方式介绍,使用虚拟卡支付阿里云

一、支付方式 二、 添加支付方式 点击添加支付方式按钮&#xff0c;您将进入添加支付方式流程。选择您偏好的支付方式&#xff0c;按页面指导进行添加即可。 1、信用卡 可以使用Fomepay的信用进行支付&#xff0c;点击获取 依次输入您银行卡的卡号、有效期、安全码&#xff…

实现一个简单的 Google Chrome 扩展程序

目录 &#x1f9ed; 效果展示 # 图示效果 a. 拓展程序列表图示效果&#xff1a; b. 当前选项卡页面右键效果&#xff1a; c. 拓展程序消息提示效果&#xff1a; &#x1f4c7; 项目目录结构 # 说明 # 结构 # 文件一览 ✍ 核心代码 # manifest.json # background.j…