【问题标题】:How to draw svg graphics with painter class如何使用画家类绘制 svg 图形
【发布时间】:2019-11-12 15:08:13
【问题描述】:

我正在尝试学习如何使用绘图功能。到目前为止,我已经能够使用 QPainter 类在 QWidget 上绘制一些圆圈,如下所示:

在 MainWindow.h 我添加了:

 virtual void paintEvents(QPaintEvent *event); 

然后在 MainWindow.cpp 我添加了:

void MainWindow::paintEvents(QPaintEvent *event) {
    QPainter painter(this);
    painter.drawEllipse( 305, 55, 475, 475 );
    painter.drawEllipse( 320, 70, 445, 445 );
    painter.end();
}

这以像素为单位画了一些圆圈,但我需要 svg。那么如何使用 QPainter 类来绘制 svg 圆圈呢?

【问题讨论】:

    标签: c++ qt qpainter


    【解决方案1】:

    您可以使用Qt SVG module。如果您正在使用 qmake,请将 QT += svg 添加到您的 .pro 文件中,然后您将能够使用 SVG 类。 然后,您可以利用QSvgRenderer 使用您的 QPainter 实例绘制 svg 文档,例如:

    #include <QSvgRenderer>
    ...
    void MainWindow::paintEvents(QPaintEvent *event) {
        QPainter painter(this);
        QSvgRenderer svgr("/path/to/img.svg");
        svgr.render(&painter);
        painter.end();
    }
    

    根据文档render 方法有另外两个重载,可以让您控制渲染的位置和内容。 您可能还想从具有相应构造函数或加载方法的 QByteArray 或 XML 流中加载 svg 内容。

    【讨论】:

    • 试图理解这一点。您所做的是加载 svg 文件?但是我想画画? QSvgRenderer 将如何帮助我解决这个问题?
    • 我想使用一些 lineEdits 根据坐标创建 svg 图像。一直在考虑走这条路。但我想我可以在每次更改 lineEdits 时重写文件,然后再更新图像....
    • @ArjanPoortman,请仔细阅读文档。您可以通过 QByteArray 加载文档,该 QByteArray 可以通过在 QString 上调用 toUtf8() 来创建。 QString 可以是一个简单的 svg 文档。您还可以绘制 svg 文档的单个元素。
    • QSvgRenderer svgr(QByteArray(svg.toUtf8()));
    猜你喜欢
    • 2017-02-12
    • 2023-01-25
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 2016-12-28
    相关资源
    最近更新 更多