本页内容

Qt 中的矢量图像格式

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

本文重点介绍矢量图像,以及在为 Qt 应用程序制作矢量图形内容时需要考虑的因素。

注意:有关 Qt 对 2D 图形的支持的一般信息,请 参阅Qt 文档中的“2D 图形”部分。

文件格式:SVG

在 Qt 中,SVG 文件可以通过两种不同的方式加载 Qt Quick:一种是使用Image组件将其作为软件光栅化图像加载,另一种是使用VectorImage 进行硬件加速渲染(包括使用svgtoqml 预先转换文件)。

此外,QSvgRenderer 还提供了对软件光栅化器的通用访问接口。QSvgWidget 和QGraphicsSvgItem 提供了用于将 SVG 内容集成到 Qt Widgets 应用程序中集成 SVG 内容提供了便捷的 API。

作为基准,Qt SVG 支持 SVG 1.2 Tiny 配置文件的静态功能。该配置文件支持的功能的详细列表可在SVG 1.2 Tiny 规范中找到。

此外,还支持某些扩展功能。

虽然不支持 SVG 的交互功能,但可以在以下任一方式中轻松实现交互: Qt Quick 或 Qt Widgets中轻松实现交互。此外,还支持某些特定的动画类型,可使用 SMIL 格式或 CSS 关键帧来实现。

以下是一个支持和不支持功能的高级列表,以概述可预期的内容。不支持的功能将在可能的情况下被忽略,因此依赖于不支持功能的 SVG 文件仍会显示,但可能会出现遗漏或错误。

变换支持
位置👍
缩放👍
轮换👍
倾斜👍
形状支持
椭圆/圆形👍
矩形👍
折线和多边形👍
贝塞尔曲线👍
标记👍
符号👍
可渲染形状已支持
填充👍
描边👍
线性渐变👍
径向渐变👍
锥形渐变👍
图案👍
渐变笔触👍
描边端点👍
笔画连接👍
线条样式(虚线等)👍
装饰性画线👍
文本支持
跨度👍
字形👍
后期处理效果支持
蒙版👍
feColorMatrix👍
feFlood👍
feOffset👍
fe高斯模糊👍
feMerge👍
剩余滤镜🚫
CSS动画已支持
颜色👍
渐变👍
不透明度👍
变换👍
偏移路径👍
运动路径👍
缓动曲线👍
其余属性🚫
SMIL动画支持
animateTransform👍
animateColor👍
animate🚫
animateMotion🚫
set🚫
其他支持
栅格图像👍
使用元素👍
切换元素👍
剪切路径🚫
多媒体🚫
脚本🚫
链接🚫

文件格式:Lottie

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

LottieAnimation 类型会加载图像,并使用软件光栅化器进行显示,这与QSvgRenderer 对SVG的处理方式非常相似。

此外,通过VectorImage 和lottietoqml工具,还可以实现硬件加速渲染。

vectorimageformats 若要通过VectorImage 使用 Lottie 文件,随 Qt Lottie Animation 模块中随附的VectorImage 插件必须与应用程序一同部署。此外, 的assumeTrustedSource 属性必须设置为true 。有关动画播放的详细控制,请参阅LottieVectorImageController 。

可以使用lottietoqml工具将 Lottie 源文件预先转换为 QML。相关示例可在lottietoqml 示例中找到。

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

变换支持
位置👍
缩放👍
轮换👍
倾斜👍
不透明度👍
锚点👍
自动方向👍
形状支持
椭圆/圆形👍
矩形👍
圆角矩形👍
多边星👍
贝塞尔曲线👍
修剪路径👍
可渲染形状已支持
填充👍
描边👍
线性渐变👍
径向渐变👍
渐变描边👍
描边端点👍
笔画连接👍
线条样式(虚线等)👍
文本支持
填充👍
笔画🚫
字体👍
字形👍
后期处理效果支持
Alpha蒙版👍
亮度蒙版👍
图层效果🚫
合并路径支持
添加👍
减🚫
交集🚫
蒙版支持
蒙版路径👍
并集👍
其他操作🚫
动画支持
颜色👍
渐变👍
不透明度👍
变换👍
路径插值👍
修剪👍
标记🚫
合并路径🚫
剩余属性🚫
缓动曲线👍
时间拉伸👍
时间重映射👍
其他支持
栅格图像👍
预渲染图层👍
表达式🚫

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

除了SVG等传统的矢量图形格式外,还可以使用自定义字体文件,其中矢量图形资源以字形的形式存储。

这种方式的优势在于,可以将简单的插图内联到文本标签中,其排版属性与文本相似。这反过来又可以使图像与文本的对齐更加容易。

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

然而,Qt 中字体的使用主要针对文本渲染进行了优化,因此当将图标字体作为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.