热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

目录前言:1.使用.SVG和.PNG文件对比图2.使用QLabel显示.SVG矢量图片3.总结前言:首先简单描述下SVG:SVG意为可缩放矢量

目录

前言:

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

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

3.总结




前言:

首先简单描述下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更复杂的操作,等之后有机会接触到了在做总结记录!


推荐阅读
  • 本文深入探讨了 C# 中 `SqlCommand` 和 `SqlDataAdapter` 的核心差异及其应用场景。`SqlCommand` 主要用于执行单一的 SQL 命令,并通过 `DataReader` 获取结果,具有较高的执行效率,但灵活性较低。相比之下,`SqlDataAdapter` 则适用于复杂的数据操作,通过 `DataSet` 提供了更多的数据处理功能,如数据填充、更新和批量操作,更适合需要频繁数据交互的场景。 ... [详细]
  • 深入解析:React与Webpack配置进阶指南(第二部分)
    在本篇进阶指南的第二部分中,我们将继续探讨 React 与 Webpack 的高级配置技巧。通过实际案例,我们将展示如何使用 React 和 Webpack 构建一个简单的 Todo 应用程序,具体包括 `TodoApp.js` 文件中的代码实现,如导入 React 和自定义组件 `TodoList`。此外,我们还将深入讲解 Webpack 配置文件的优化方法,以提升开发效率和应用性能。 ... [详细]
  • 本文介绍了如何通过创建自定义 XML 文件来修改 Android 中 Spinner 的项样式,包括颜色和大小的调整。 ... [详细]
  • 在使用mybatis进行mapper.xml测试的时候发生必须为元素类型“mapper”声明属性“namespace”的错误项目目录结构UserMapper和UserMappe ... [详细]
  • 一、使用Microsoft.Office.Interop.Excel.DLL需要安装Office代码如下:2publicstaticboolExportExcel(S ... [详细]
  • 本文详细介绍了 `org.apache.tinkerpop.gremlin.structure.VertexProperty` 类中的 `key()` 方法,并提供了多个实际应用的代码示例。通过这些示例,读者可以更好地理解该方法在图数据库操作中的具体用途。 ... [详细]
  • 本文详细介绍了如何利用 Bootstrap Table 实现数据展示与操作,包括数据加载、表格配置及前后端交互等关键步骤。 ... [详细]
  • 管理UINavigationController中的手势返回 - Managing Swipe Back Gestures in UINavigationController
    本文介绍了如何在一个简单的闪存卡片应用中实现平滑的手势返回功能,以增强用户体验。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • Go 项目中数据库配置文件的优化与应用 ... [详细]
  • 本文详细探讨了OpenCV中人脸检测算法的实现原理与代码结构。通过分析核心函数和关键步骤,揭示了OpenCV如何高效地进行人脸检测。文章不仅提供了代码示例,还深入解释了算法背后的数学模型和优化技巧,为开发者提供了全面的理解和实用的参考。 ... [详细]
  • PyQt5 QTextEdit:深入解析Python中多功能GUI库的应用与实现
    本文详细探讨了 PyQt5 中 QTextEdit 组件在 Python 多功能 GUI 库中的应用与实现。PyQt5 是 Qt 框架的 Python 绑定,提供了超过 620 个类和 6000 个函数及方法,广泛应用于跨平台应用程序开发。QTextEdit 作为其中的重要组件,支持丰富的文本编辑功能,如富文本格式、文本高亮和自定义样式等。PyQt5 的流行性不仅在于其强大的功能,还在于其易用性和灵活性,使其成为开发复杂用户界面的理想选择。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • Android与JUnit集成测试实践
    本文探讨了如何在Android项目中集成JUnit进行单元测试,并详细介绍了修改AndroidManifest.xml文件以支持测试的方法。 ... [详细]
  • 本文介绍了一种在ZC公司的员工评估系统中,如何根据动态设置的评分指标,在后台查询时动态生成并显示数据表的方法。该方法确保了评分指标与被评人员信息的有效整合。 ... [详细]
author-avatar
恋若寒1999
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有