QSvgRenderer Class
QSvgRenderer 类用于将 SVG 文件的内容绘制到绘图设备上。更多内容...
| 头文件: | #include <QSvgRenderer> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Svg) target_link_libraries(mytarget PRIVATE Qt6::Svg) |
| qmake: | QT += svg |
| 继承自: | QObject |
- 所有成员列表(包括继承的成员)
- QSvgRenderer 属于绘图类。
注意:本类中的所有函数均为可重入函数。
属性
|
公共函数
| QSvgRenderer(QObject *parent = nullptr) | |
| QSvgRenderer(QXmlStreamReader *contents, QObject *parent = nullptr) | |
| QSvgRenderer(const QByteArray &contents, QObject *parent = nullptr) | |
| QSvgRenderer(const QString &filename, QObject *parent = nullptr) | |
| virtual | ~QSvgRenderer() |
| bool | animated() const |
| Qt::AspectRatioMode | aspectRatioMode() const |
| QRectF | boundsOnElement(const QString &id) const |
| QSize | defaultSize() const |
| bool | elementExists(const QString &id) const |
| int | framesPerSecond() const |
| bool | isAnimationEnabled() const |
| bool | isValid() const |
| QtSvg::Options | options() const |
| void | setAnimationEnabled(bool enable) |
| void | setAspectRatioMode(Qt::AspectRatioMode mode) |
| void | setFramesPerSecond(int num) |
| void | setOptions(QtSvg::Options flags) |
| void | setViewBox(const QRect &viewbox) |
| void | setViewBox(const QRectF &viewbox) |
| QTransform | transformForElement(const QString &id) const |
| QRect | viewBox() const |
| QRectF | viewBoxF() const |
公共槽
| bool | load(QXmlStreamReader *contents) |
| bool | load(const QByteArray &contents) |
| bool | load(const QString &filename) |
| void | render(QPainter *painter) |
| void | render(QPainter *painter, const QRectF &bounds) |
| void | render(QPainter *painter, const QString &elementId, const QRectF &bounds = QRectF()) |
信号
| void | repaintNeeded() |
静态公共成员
(since 6.8) void | setDefaultOptions(QtSvg::Options flags) |
详细说明
使用 QSvgRenderer,可将可缩放矢量图形 (SVG) 渲染到任何QPaintDevice 子类上,包括QWidget 、QImage 和 QGLWidget。
QSvgRenderer 提供了一个 API,支持 SVG 渲染的基本功能,例如静态绘图的加载和渲染,以及动画等更具交互性的功能。由于渲染是通过QPainter 实现的,因此 SVG 绘图可以在QPaintDevice 的任何子类上进行渲染。
SVG绘图可在创建 QSvgRenderer 时加载,也可稍后通过load() 函数加载。数据既可以序列化的 XML 格式直接提供,也可以通过文件名间接提供。如果已加载有效文件(无论是在渲染器创建时还是之后),isValid() 将返回 true;否则返回 false。 QSvgRenderer 提供了render() 插槽,用于使用指定的绘图器渲染当前文档或动画文档的当前帧。
defaultSize() 函数提供有关渲染当前加载的 SVG 文件所需空间大小的信息。这对于绘图设备(如QWidget )非常有用,因为此类设备通常需要向其父布局提供大小提示。绘图的默认大小可能与其可见区域不同,后者可通过viewBox 属性获取。
系统支持带动画的 SVG 绘图,并可通过一组简单的函数和属性进行控制:
- animated() 函数用于指示绘图是否包含动画信息。
- framesPerSecond 属性包含动画的播放速率。
最后,QSvgRenderer 类提供了repaintNeeded() 信号,每当文档的渲染需要更新时,该信号就会被触发。
另请参阅 QSvgWidget 、 Qt SVG C++ Classes以及QPicture 。
属性文档
[since 6.7] animationEnabled : bool
如果 SVG 包含动画元素,该属性决定动画是否应运行
将该属性设置为 false 将停止动画计时器。将该属性设置为 true 将启动动画计时器,前提是 SVG 中包含动画元素。
如果 SVG 没有动画效果,该属性将不起作用。否则,该属性的默认值为 true。
此枚举类型在 Qt 6.7 中引入。
访问函数:
| bool | isAnimationEnabled() const |
| void | setAnimationEnabled(bool enable) |
另请参阅 ` animated()`。
aspectRatioMode : Qt::AspectRatioMode
渲染如何遵循 SVG 视图框的宽高比
支持的模式包括:
- Qt::IgnoreAspectRatio (默认):忽略宽高比,并将渲染内容拉伸至目标边界。
- Qt::KeepAspectRatio:在保持宽高比的前提下,将渲染内容居中并尽可能放大以适应目标边界。
访问函数:
| Qt::AspectRatioMode | aspectRatioMode() const |
| void | setAspectRatioMode(Qt::AspectRatioMode mode) |
framesPerSecond : int
该属性存储要显示的每秒帧数
如果当前文档没有动画效果,则每秒帧数为 0。
访问函数:
| int | framesPerSecond() const |
| void | setFramesPerSecond(int num) |
另请参阅 animated()。
[since 6.7] options : QtSvg::Options
该属性包含一组QtSvg::Option 标志,可用于启用或禁用SVG文件解析和渲染的各项功能。
为了使该属性生效,必须在执行 `before load ()` 之前将其设置。请注意,接受 SVG 源参数的构造函数将在构造过程中执行加载操作。
该枚举在 Qt 6.7 中引入。
访问函数:
| QtSvg::Options | options() const |
| void | setOptions(QtSvg::Options flags) |
另请参阅 setDefaultOptions 。
viewBox : QRectF
该属性存储一个矩形,用于指定文档在逻辑坐标系中的可见区域
访问函数:
| QRectF | viewBoxF() const |
| void | setViewBox(const QRect &viewbox) |
| void | setViewBox(const QRectF &viewbox) |
成员函数文档
QSvgRenderer::QSvgRenderer(QObject *parent = nullptr)
使用给定的parent 构建一个新的渲染器。
QSvgRenderer::QSvgRenderer(QXmlStreamReader *contents, QObject *parent = nullptr)
使用给定的parent 构建一个新的渲染器,并使用contents 指定的流读取器加载SVG数据。
QSvgRenderer::QSvgRenderer(const QByteArray &contents, QObject *parent = nullptr)
使用给定的parent 创建一个新的渲染器,并从contents 指定的字节数组中加载SVG数据。
QSvgRenderer::QSvgRenderer(const QString &filename, QObject *parent = nullptr)
使用给定的parent 创建一个新的渲染器,并加载指定filename 的SVG文件内容。
[virtual noexcept] QSvgRenderer::~QSvgRenderer()
销毁渲染器。
bool QSvgRenderer::animated() const
如果当前文档中包含动画元素,则返回 true;否则返回 false。
另请参阅 framesPerSecond()。
QRectF QSvgRenderer::boundsOnElement(const QString &id) const
返回该项在给定id 下的边界矩形。父元素的变换矩阵不会影响该元素的边界。
另请参阅 transformForElement()。
QSize QSvgRenderer::defaultSize() const
返回文档内容的默认大小。
bool QSvgRenderer::elementExists(const QString &id) const
如果当前正在解析的 SVG 文件中存在具有给定 `id ` 的元素,且该元素是可渲染的,则返回 true。
注意:此方法仅对可渲染的元素返回 true。这意味着被视为填充/描边样式属性组成部分的元素(例如 radialGradients),即使标有“id”属性,也不会被此方法检出。
bool QSvgRenderer::isValid() const
如果存在有效的当前文档,则返回 true;否则返回 false。
[slot] bool QSvgRenderer::load(QXmlStreamReader *contents)
将指定的 SVG 文件加载到 `contents` 中,如果内容解析成功则返回 `true`;否则返回 `false`。
将从当前位置开始使用该阅读器。如果contents 为null ,则行为未定义。
注意:此 插槽已被重载。要连接到此插槽:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
svgRenderer, qOverload(&QSvgRenderer::load));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
svgRenderer, [receiver = svgRenderer](QXmlStreamReader *contents) { receiver->load(contents); }); [slot] bool QSvgRenderer::load(const QByteArray &contents)
加载指定的SVG格式contents ,如果内容解析成功则返回true;否则返回false。
注意:此 插槽为重载插槽。要连接到此插槽:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
svgRenderer, qOverload(&QSvgRenderer::load));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
svgRenderer, [receiver = svgRenderer](const QByteArray &contents) { receiver->load(contents); }); [slot] bool QSvgRenderer::load(const QString &filename)
加载由 `filename` 指定的 SVG 文件,如果内容解析成功,则返回 true;否则返回 false。
注意:此 插槽已被重载。要连接到此插槽:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
svgRenderer, qOverload(&QSvgRenderer::load));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
svgRenderer, [receiver = svgRenderer](const QString &filename) { receiver->load(filename); }); [slot] void QSvgRenderer::render(QPainter *painter)
使用给定的painter 渲染当前文档,或动画文档的当前帧。
注意:此 插槽已被重载。要连接到此插槽:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
svgRenderer, qOverload(&QSvgRenderer::render));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
svgRenderer, [receiver = svgRenderer](QPainter *painter) { receiver->render(painter); }); [slot] void QSvgRenderer::render(QPainter *painter, const QRectF &bounds)
使用给定的painter 在绘图器中的指定bounds 上渲染当前文档或动画文档的当前帧。如果bounds 不为空,输出将被缩放以填满该区域,并忽略SVG中隐含的任何宽高比。
注意:此 插槽已被重载。要连接到此插槽:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
svgRenderer, qOverload(&QSvgRenderer::render));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
svgRenderer, [receiver = svgRenderer](QPainter *painter, const QRectF &bounds) { receiver->render(painter, bounds); }); [slot] void QSvgRenderer::render(QPainter *painter, const QString &elementId, const QRectF &bounds = QRectF())
使用给定的painter 在指定的bounds 上,通过elementId 渲染给定的元素。如果未指定边界矩形,则将SVG元素映射到整个绘图设备上。
注意:此 插槽已被重载。若要连接到此插槽:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
svgRenderer, qOverload(&QSvgRenderer::render));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
svgRenderer, [receiver = svgRenderer](QPainter *painter, const QString &elementId, const QRectF &bounds) { receiver->render(painter, elementId, bounds); }); [signal] void QSvgRenderer::repaintNeeded()
每当需要更新文档的渲染效果时,就会发出此信号,通常是为了实现动画效果。
[static, since 6.8] void QSvgRenderer::setDefaultOptions(QtSvg::Options flags)
将渲染器创建时使用的选项标志设置为flags 。默认情况下,不设置任何标志。
在运行时,可以通过 QT_SVG_DEFAULT_OPTIONS 环境变量覆盖此设置。
该函数自 Qt 6.8 起引入。
QTransform QSvgRenderer::transformForElement(const QString &id) const
返回具有给定id 的元素的变换矩阵。该矩阵是该元素父元素变换的乘积。不包含该元素自身的变换。
若要在逻辑坐标系中求得该元素的边界矩形,可将该变换矩阵应用于由 `boundsOnElement()` 函数返回的矩形。
另请参阅 boundsOnElement()。
QRect QSvgRenderer::viewBox() const
返回viewBoxF().toRect()。
另请参阅 setViewBox() 和viewBoxF()。
© 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.