Qt加载SVG矢量图片,放大缩小图片质量不发生变化。

前言:

首先简单描述下SVG:

SVG 意为可缩放矢量图形(Scalable Vector Graphics)。
SVG 使用 XML 格式定义图像。

给界面或者按钮上显示一个图标或背景图片,日常使用.png格式的文件完全够用,但是有些使用场景需要把图片放大显示时,使用.png文件就会开始模糊,这时需要加载.SVG文件,即使放大也很清晰。

1.使用.SVG和.PNG文件对比图

在这里插入图片描述
左边显示的是svg格式的图片,右边显示的是png格式的图片,当放大到一定尺寸时,svg图片依然很清晰, png图片已经模糊了。

2.使用QLabel显示.SVG矢量图片

在界面添加一个QLabel控件,最终是要把.Svg图片显示到QLabel中的。

(1)使用QSvgRenderer加载矢量图片.

(2)提供绘制设备,QPixmap对象;

(3)提供画家,QPainter对象;并与绘制设备建立联系;

(4)调用QSvgRenderer的render(painter)函数,让画家执行渲染操作!

(5)最后将绘制设备放到QLabel中。

需要加的头文件:

#include "qsvgrenderer.h"
#include "qpainter.h"

代码如下:

void BSDNClient::InitSvgWidget()
{QSvgRenderer* m_svgRender = new QSvgRenderer;m_svgRender->load(QString(":/image/Resource/image/csdn.svg"));QSize size = m_svgRender->defaultSize(); //获取svg的大小QPixmap pix(size * 1.8);          // 在这给绘图设备重新设置大小pix.fill(Qt::transparent);        // 像素清空,这一步必须有,否则背景有黑框QPainter painter(&pix);           // 画家和绘图设备建立联系painter.setRenderHints(QPainter::Antialiasing);     //反锯齿绘制m_svgRender->render(&painter);    //执行渲染操作ui.m_pLabelSvg->setPixmap(pix);   //将pix加载到QLabel上ui.m_pLabelSvg->setAlignment(Qt::AlignCenter);  //设置居中显示
}

根据以上代码可以看出来,QSvgRenderer类用于将SVG文件的内容绘制到绘制设备上。

QSvgRenderer类的load()函数加载svg文件,需要将svg文件加载到资源文件中,QSvgRenderer类的defaultSize()函数可以获取当前svg原本的大小,将这个大小乘以一个系数,给绘制设备,就能实现放大缩小显示。

QPixmap对象的尺寸大小就是根据原有svg的尺寸进行放大1.8倍显示;
pix.fill(Qt::transparent);这一步清空像素,如果不加的话,会导致背景变黑色;
QPainter painter(&pix); 定义画家QPainter对象,将绘图设备pix的地址作为参数传进去。
m_svgRender->render(&painter);执行渲染操作;
ui.m_pLabelSvg->setPixmap(pix); //将pix加载到QLabel上

注意:
因为用到了Svg模块,需要给项目配置加上svg模块,我用的vs2019+Qt,配置如下图:

在这里插入图片描述

3.总结

本文只是将一个svg矢量图片显示在了一个QLabel控件上,只是最简单的功能,只是QtSvg模块中的一个使用方法,该模块还有其它方式可以实现对Svg更复杂的操作,等之后有机会接触到了在做总结记录!

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

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

相关文章

QChartView显示实时更新的温度曲线图(二)

文章目录 参考图说明1. 项目结构2. TempChartView.pro3. main.cpp4. TemperatureSeries.qml5. main.qml详细说明 参考图 说明 Qt Charts 提供了一系列使用图表功能的简单方法。它使用Qt Graphics View Framework 图形视图框架,因此可以很容易集成到用户界面。可以使…

基于小波分析的纹理和颜色反射对称性检测(MATLAB R2018A)

对称物体在自然图像和合成图像中普遍存在。作为对称物体最重要的全局特征之一,对称性检测长期以来都是计算机视觉领域的研究热点,并在图片的语义提取、图像语义理解以及情感识别等任务上具有广泛的应用。对称物体的检测技术,就是将图片中所蕴…

【前端】HTML+CSS复习记录【3】

文章目录 前言一、from(表单)二、style属性1、标签中直接定义(内联样式)2、定义在head中3、外部链接引用 四、 class 选择器系列文章目录 前言 长时间未使用HTML编程,前端知识感觉忘得差不多了。通过梳理知识点&#…

qq文件传输助手在哪里?详细图文教程告诉你(2024新版)

QQ作为一款功能强大的社交软件,不仅提供了聊天、语音、视频等多种通讯方式,还内置了文件传输助手这一实用工具。通过文件传输助手,用户可以在不同设备之间轻松传输文件,实现跨平台的便捷操作。 那么,qq文件传输助手在…

【@AutoWired和@Resource的区别】

AutoWired和Resource的区别 这两个我们在项目中,经常去使用。很少有人知道他们有什么区别。下面我们将从 来源依赖查找顺序支持的参数依赖注入的用法支持 这四个方面来说明他们俩个的区别 来源 Autowired: 这是Spring框架自带的注解,用于实现自动依…

绝区零 Mac 下载安装详细教程(MacOS IPA 砸壳包 playCover 完美运行)

绝区零 7.4 号开始公测,但刚刚就可以开始下载了,我也是第一时间就迫不及待的安装到了我的 Mac 电脑上,感兴趣的朋友可以跟我一起安装试试 我这里是通过 playCover 的形式在 Mac 上安装运行的,根据之前原神的经验所以这次还是同样…

惠海 H6912 升压恒流芯片IC 支持2.6-40V升12V24V36V48V60V100V 10A 摄影灯 太阳能灯 UV灯 杀菌灯

1.产品描述 H6912是一款外围电路简洁的宽调光比升压调光LED恒流驱动器,可适用于2.6-40V输入 电压范围的LED恒流照明领域。H6912可以实现高精度的恒流效果,输出电流恒流精度≤士3%,电压工作范围为2.6-40V.可以轻松满足锂电池及中低压的应用需…

嵌入式Linux系统编程 — 6.1 信号的基本概念

目录 1 信号的概念和作用 1.1 什么是信号 1.2 信号的目的 1.3 信号如何处理 2 信号的分类 2.1 可靠信号与不可靠信号 2.2 实时信号与非实时信号 3 常见信号与默认行为 3.1 信号本质上是 int 类型数字编号 3.2 常见信号 1 信号的概念和作用 1.1 什么是信号 信号是一…

艾体宝干货 | 解析Redis企业版的多租户技术

在多租户架构中,一个软件实例为多个不同的用户组(或“租户”)提供服务。每个租户的数据都被安全地隔离,确保它们对其他租户不可见且无法访问。可以将其想象为一栋公寓大楼,每个人都住在共享建筑中独立且隔离的单元中。…

大模型时代的基础架构,大模型算力中心建设指南重磅来袭!

什么是最畅销商品?什么是高毛利商品? 我们来看一个例子: 一件T恤使用成本为100元的原料,价格为140元。另一件T恤使用成本为80元的原料,但在样式、颜色、图案的设计上比较有特色,价格也为140元。 当这两件…

【JVM-04】线上CPU100%

【JVM-04】线上CPU100% 1. 如何排查2. 再举一个例子 1. 如何排查 ⼀般CPU100%疯狂GC,都是死循环的锅,那怎么排查呢?先进服务器,⽤top -c 命令找出当前进程的运⾏列表按⼀下 P 可以按照CPU使⽤率进⾏排序显示Java进程 PID 为 2609…

苏东坡传-读书笔记七

苏堤和西湖之与杭州,正如美女花容月貌上的双眸。我常想,倘若西湖之是空空的一片水——没有苏堤那秀美的修眉和虹彩般的仙岛,一画龙点睛增其神韵,那西湖该望之如何?几百年来的中国游客,春季到来之时,向西湖…

如何在Python中实现一个简单的爬虫程序

如何在Python中实现一个简单的爬虫程序 随着互联网的发展,数据已成为当今社会最宝贵的资源之一。而爬虫程序则成为了获取互联网数据的重要工具之一。本文将介绍如何在Python中实现一个简单的爬虫程序,并提供具体的代码示例。 确定目标网站 在开始编写爬…

【Python】已解决:urllib.error.HTTPError: HTTP Error 403: Forbidden

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:urllib.error.HTTPError: HTTP Error 403: Forbidden 一、分析问题背景 在使用Python的urllib库中的urlopen或urlretrieve函数下载文件时,有时会遇到…

全国30省份各省资本存量数据固定资本形成总额永续盘存法(2000-2023年)

各省资本存量数据通过永续盘存法进行了详细的计算,这一方法覆盖了中国30个省份(不包括西藏),提供从2000年起直至2023的资本存量数据集。包括原始数据、测算过程、最终的资本存量结果。 以2000年作为基期年份,依据…

电路笔记(PCB):电流容量(IPC-2221和IPC-2152)+阻抗匹配

电流容量 IPC-2221经验公式 I K T b A c IK\times T^{b}\times A^{c} IKTbAc 这个公式用于估计PCB(Printed Circuit Board,印刷电路板)导线上的电流(I),其中T和A分别表示温度(Temperature&a…

flex布局中子元素内容超出时,子元素本身出现滚动条实现方法

flex布局中子元素宽度平均分配,并且当子元素内容超出时,子元素本身出现滚动条实现方法: 将父元素设置为display: flex,以启用Flexbox布局。将每个子元素的flex属性设置为1,以使其宽度平均分配。设置子元素的overflow属…

ComfyUI流程图、文生图、图生图步骤教学!

前言 leetcode , 209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的子数组 [numsl, numsl1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 …

大厂都在“抢滩”欧洲杯,你该如何蹭上热度?

2024欧洲杯战至第三轮小组赛,德国、瑞士、西班牙、意大利已出线角逐1/8决赛。 云略统计,欧洲杯开战至今,抖音上“欧洲杯”相关话题高达1000个,其中#谁是欧洲杯预言家 话题播放量高达7.57亿,C罗、姆巴佩等国际巨星更是频…

DB-100撕裂开关 JOSEF约瑟 合金接线端子,轻松接线

一、产品概述 型号:DB-100 主要用途:DB-100撕裂开关主要用于监测皮带输送机在运行过程中是否发生纵向撕裂,一旦发现撕裂情况,立即触发报警或停机,以保护设备和生产线的安全运行。 二、技术特点 检测原理:…