本页面

Qt 中的矢量图像格式

Qt 支持许多用于加载图形数据的标准文件格式,允许应用程序导入用其他工具制作的内容。

本文重点介绍矢量图像,以及在 Qt 应用程序中制作矢量图形内容时应注意的事项。

注: 有关 Qt 支持 2D 图形的一般信息,请参阅Qt 中的 2D 图形文档

文件格式:SVG

SVG 文件可以通过以下两种不同的方式加载 Qt Quick:一种是使用Image组件以软件光栅化图像的形式载入,另一种是使用VectorImage 以硬件加速渲染的形式载入(包括使用svgtoqml 提前转换文件)。

此外,QSvgRenderer 还提供了对软件光栅化器的一般访问。QSvgWidgetQGraphicsSvgItem 提供了方便的应用程序接口,用于在应用程序中集成 SVG 内容。 Qt Widgets应用程序中集成 SVG 内容的便利 API。

作为基线,Qt SVG 支持 SVG 1.2 Tiny profile 的静态特性。SVG 1.2 Tiny 规范中提供了该配置文件所支持功能的详细列表。

此外,Qt 还支持一些扩展功能。这些功能目前只支持软件光栅化器,而不支持VectorImagesvgtoqml 中的硬件加速渲染器。

SVG 不支持交互功能,但交互功能可以很容易地在 Qt QuickQt Widgets.使用 SMIL 格式或 CSS 关键帧,还支持某些特定的动画类型。

以下是支持和不支持的功能的高级列表,以概述所需的功能。不支持的功能将尽可能被忽略,因此依赖于不支持功能的 SVG 文件仍会显示,但可能会有遗漏或错误。

高级功能软件光栅化器VectorImage注释
转换支持
基本形状圆、矩形、椭圆、直线、折线和多边形
任意形状任意形状由任意贝塞尔曲线和直线构建的复合路径
光栅图像嵌入式和存储在文件系统中
间接特别是 "使用 "元素
条件处理特别是 "切换 "元素
简单文本布局
嵌入式字体
纯色填充
渐变填充
自定义笔触可定制宽度、行盖、连接线和破折号
外观笔画不随视图缩放的轮廓
渐变笔画
多媒体
脚本
链接

此外,SVG 1.1 和 SVG 2.0 还支持以下扩展功能:

高级功能软件光栅器VectorImage注释
遮罩
剪切路径
图案
标记
可重复使用的符号
后处理过滤器feColorMatrix, feFlood, feGaussianBlur, feOffset 和 feMerge。

最后,支持以下属性动画(此处未列出的动画目前不支持)。动画应以 CSS 关键帧格式导出,以获得最佳效果。

动画功能软件光栅化器VectorImage注释
变形动画
色彩动画
不透明度动画
偏移路径动画沿路径动画项目位置和方向

文件格式Lottie

与 SVG 类似,在 Qt 中加载 Lottie 格式文件也有不同的方法。

LottieAnimation 类型使用软件光栅化器加载图像并显示,就像QSvgRenderer 对 SVG 所做的那样。

此外,还可以使用VectorImagelottietoqml工具进行硬件加速渲染。

要在VectorImage 中使用 Lottie 文件,必须在部署应用程序的同时部署vectorimageformats 插件。 Qt Lottie Animation模块随附的插件必须与应用程序一起部署。此外,VectorImageassumeTrustedSource 属性必须设置为true

可使用lottietoqml工具将 Lottie 源文件预转换为 QML。相关示例可参见lottietoqml 示例

以下是LottieAnimation 类型(软件光栅化器)和VectorImage 支持的高级功能列表(也包括使用lottietoqml 预转换文件)。

高级功能LottieAnimationVectorImage注释
转换转换
形状
实体填充
渐变填充
自定义笔触可定制宽度、行上限、连接线和破折号
渐变笔画
图像层仅嵌入数据
预合成层
路径修剪
哑光
遮罩
中继器
图层效果仅填充效果
文本图层
多媒体不支持不支持音频和摄像头层。
表达不支持不支持
3D 图层不支持
时间重映射

原则上,几乎所有 Lottie 格式的属性都可以动画化。要获得对可动画属性的广泛支持,请使用LottieAnimationVectorImage 类型(和lottietoqml)为选定的常用于创建动画的属性子集提供支持。

高级特性LottieAnimationVectorImage注释
变换动画
路径修剪动画
颜色动画
不透明度动画
路径动画形状控制点的变形动画。
沿路径移动沿路径动画项目位置和方向
其他属性动画

文件格式:作为矢量图像格式的字体文件

除了传统的矢量图形格式(如 SVG)外,还可以使用自定义字体文件,将矢量图形资产存储为字形。

这样做的好处是,简单的插图可以内嵌到文本标签中,具有与文本类似的排版属性。这反过来又可以使图像与文本更容易对齐。

为此目的使用字体文件也是分发大型图标库的一种便捷方式,同时还能提供可在运行时替换的主题。

不过,Qt XML 中的字体使用是为生成文本而优化的,因此在使用图标字体替代专门的矢量图像组件(如VectorImage )时需要考虑一些因素。

首先,彩色字体总是以指定的像素大小预先栅格化。这意味着对此类文本项目应用变换时会产生缩放效果。例如,对于需要缩放的插图,最好使用VectorImage

对于任何动画矢量图像,也最好使用专用组件。虽然可变字体格式扩展使变形动画成为可能,但这并不是 Qt 中字体系统优化的用途。因此,与使用其他矢量图像格式相比,对字体的可变轴进行动画处理的效率较低。

因此,对于动画和/或多色矢量图像,通常应优先使用 SVG 等格式。而对于单色、静态的矢量图像,使用字体则具有一定的便利性。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.