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 属于绘画类。
注意:该类中的所有函数都是可重入的。
属性
|
公共功能
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 会停止动画定时器。如果 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。
阅读器将在当前位置使用。如果contents 是null
,则行为未定义。
[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.