QSvgRenderer Class

QSvgRenderer 类用于将 SVG 文件的内容绘制到绘画设备上。更多

Header: #include <QSvgRenderer>
CMake: find_package(Qt6 REQUIRED COMPONENTS Svg)
target_link_libraries(mytarget PRIVATE Qt6::Svg)
qmake: QT += svg
继承: QObject

注意:该类中的所有函数都是可重入的

属性

公共功能

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 绘图,并可通过一系列简单的函数和属性进行控制:

最后,QSvgRenderer 类提供了repaintNeeded() 信号,每当文档的渲染需要更新时就会发出该信号。

另请参见 QSvgWidgetQt SVG C++ ClassesQPicture

属性文档

[since 6.7] animationEnabled : bool

如果 SVG 有动画,则该属性表示动画是否应运行。

将该属性设置为 false 会停止动画定时器。如果 SVG 包含动画元素,则将该属性设置为 true 可启动动画定时器。

如果 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)

contents 中加载指定的 SVG,如果内容已成功解析,则返回 true;否则返回 false。

阅读器将在当前位置使用。如果contentsnull ,则行为未定义。

[slot] bool QSvgRenderer::load(const QByteArray &contents)

加载指定的 SVG 格式contents ,如果内容已成功解析,则返回 true;否则返回 false。

[slot] bool QSvgRenderer::load(const QString &filename)

加载filename 指定的 SVG 文件,如果内容已成功解析,则返回 true;否则返回 false。

[slot] void QSvgRenderer::render(QPainter *painter)

使用给定的painter 渲染当前文档或动画文档的当前帧。

[slot] void QSvgRenderer::render(QPainter *painter, const QRectF &bounds)

在绘制器中指定的bounds 上使用给定的painter 渲染当前文档或动画文档的当前帧。如果bounds 不为空,输出将按比例填充,忽略 SVG 暗示的任何纵横比。

[slot] void QSvgRenderer::render(QPainter *painter, const QString &elementId, const QRectF &bounds = QRectF())

在指定的bounds 上使用给定的painter 渲染给定元素elementId 。如果未指定边界矩形,SVG 元素将映射到整个绘制设备上。

[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()。

© 2025 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.