本页内容

渲染 SVG 文件

SVG绘图可以渲染到任何QPaintDevice 子类上,例如QWidget 或QImage 。渲染SVG文件最简单的方法是使用QSvgWidget 或QSvgRenderer 。

使用 QSvgWidget

QSvgWidget 提供了一个用于显示 SVG 文件的便捷控件。

#include <QApplication>
#include <QSvgWidget>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QSvgWidget svgWidget(QStringLiteral(":/images/example.svg"));
    svgWidget.setGeometry(100, 100, 400, 400);
    svgWidget.show();
    return app.exec();
}

您也可以在实例化后加载 SVG 文件:

#include <QApplication>
#include <QSvgWidget>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QSvgWidget *svgWidget = new QSvgWidget;
    svgWidget->load(QStringLiteral(":/images/example.svg"));
    svgWidget->show();
    return app.exec();
}

使用 QSvgRenderer

使用QSvgRenderer 将 SVG 内容渲染到任何QPaintDevice 上。

#include <QApplication>
#include <QSvgRenderer>
#include <QImage>
#include <QPainter>
#include <QLabel>
#include <QPixmap>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QSvgRenderer renderer(QStringLiteral(":/images/example.svg"));
    if (renderer.isValid()) {
        QImage image(400, 400, QImage::Format_ARGB32_Premultiplied);
        image.fill(Qt::transparent);
        QPainter painter(&image);
        renderer.render(&painter);

        QLabel label;
        label.setPixmap(QPixmap::fromImage(image));
        label.resize(400, 400);
        label.show();
        return app.exec();
    }
    return 1;
}

您还可以使用QSvgRenderer 在自定义控件的paint事件中直接渲染SVG:

// In your widget's header file:
#include <QSvgRenderer>

class MyWidget : public QWidget
{
    Q_OBJECT
public:
    MyWidget(QWidget *parent = nullptr)
        : QWidget(parent), renderer(QStringLiteral(":/images/example.svg")) {}

protected:
    void paintEvent(QPaintEvent *) override {
        QPainter painter(this);
        renderer.render(&painter);
    }

private:
    QSvgRenderer renderer;
};

这些方法允许您在Qt支持的所有绘制设备上渲染SVG文件,包括QWidget 和QImage 。

渲染选项

QSvgRenderer 通过QtSvg::Option 枚举提供options 的渲染选项。这些选项可让您控制 SVG 文件的解析和渲染方式。

渲染动画 SVG 文件

Qt SVG 模块支持渲染动画SVG文件。有关如何处理动画SVG的详细信息,请参阅QSvgRenderer 类的文档。

另请参阅 Qt Image Formats和扩展功能。

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