如何用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 内容。
我正在努力学习如何使用绘图功能。到目前为止,我已经能够使用 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 内容。