如何用painter绘制svg图形class

How to draw svg graphics with painter class

我正在努力学习如何使用绘图功能。到目前为止,我已经能够使用 QPainter class 在 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 class 来绘制 svg 圆圈呢?

您可以使用 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 内容。