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.pswp.cn/diannao/39237.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/39237.shtml
英文地址,請注明出處:http://en.pswp.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元素和組件,大大簡…