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文件传输助手在…

机器之心:自动化与机器人技术详解

目录 引言 自动化与机器人技术的定义 发展历程 深化应用 工业领域 医疗领域 农业领域 服务领域 其他领域 面临的挑战与未来展望 一、成本问题 二、技术瓶颈 三、安全性和伦理问题 四、就业问题 未来趋势 一、智能化和自主化:机器人技术的核心驱动力…

tmux 命令

这篇是另一篇内容的前置知识。因为项目部署测试需要,向公司申请了一个虚拟机做服务器用。以下是回溯的命令,多了解了解,拓宽知识面吧。PS:本人小白一个,知识浅显,勿喷。 tmux 常用快捷键 tmux 提供了一系…

【C语言】常见的数据排序算法

目录 一、概述 二、常见的排序算法 2.1 冒泡排序 2.1.1 定义 2.1.2 C语言实现 2.2 快速排序 2.2.1 定义 2.2.2 C语言实现 2.3 插入排序 2.3.1 定义 2.3.2 C语言实现 2.4 希尔排序 2.4.1 定义 2.4.2 C语言实现 2.5 归并排序 2.5.1 定义 2.5.2 C语言实现 2.6 基…

【@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.可以轻松满足锂电池及中低压的应用需…

Python中的爬虫实战:猫眼电影爬虫

随着互联网技术的快速发展,网络上的信息量越来越庞大。猫眼电影作为国内领先的电影数据平台,为用户提供了全面的电影信息服务。本文将介绍如何利用python编写简单的猫眼电影爬虫,获取电影相关数据。 爬虫概述 爬虫,即网络爬虫&a…

x264 编码器 common.h 文件中结构体详细介绍

x264_slice_header_t 定义:typedef struct {x264_sps_t *sps;x264_pps_t *pps;int i_type;int i_first_mb;int i_last_mb;int i_pps_id;int i_frame_num

嵌入式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企业版的多租户技术

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

Java 商城后台管理系统

### 构建一个健壮的商城后台管理系统 使用Java Spring Boot框架和MySQL数据库,逐步构建一个健壮、安全、高效的商城后台管理系统。本文涵盖用户管理、商品管理、订单管理、分类管理、权限控制、日志记录、分页和排序、文件上传、缓存以及国际化。 --- #### 项目初…

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

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

【JVM-04】线上CPU100%

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

苏东坡传-读书笔记七

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

throw和catch关键字的作用。

在C中,throw和catch是异常处理机制的关键字,它们共同工作以处理在程序执行过程中发生的异常情况。 throw 关键字 throw关键字用于抛出一个异常。当程序遇到无法处理的错误时,它会使用throw语句抛出一个异常。这通常是因为遇到了某些无法恢复…

使用Vue 2 + Element UI搭建后台管理系统框架实战教程

后台管理系统作为企业内部的核心业务平台,其界面的易用性和功能性至关重要。Vue 2作为一个成熟的前端框架,以其轻量级和高效著称,而Element UI则是一套专为桌面端设计的Vue 2组件库,它提供了丰富的UI元素和组件,大大简…