天天看點

python畫矢量圖_Qt使用QPainter繪制矢量圖并儲存為svg檔案

#include "MainWindow.h"

MainWindow::MainWindow(QWidget *parent)

: QMainWindow(parent)

{

QMenu *fileMenu = menuBar()->addMenu(QObject::tr("&File"));

fileMenu->addAction(QObject::tr("Save As Svg"), this, &MainWindow::actionSaveAsSVG);

}

MainWindow::~MainWindow()

{

}

void MainWindow::paintEvent(QPaintEvent *event)

{

paintAll();

}

void MainWindow::actionSaveAsSVG()

{

QString filePath = QFileDialog::getSaveFileName(this, "Save SVG",

"", "SVG files (*.svg)");

if (filePath == "")

return;

QSvgGenerator generator;

generator.setFileName(filePath);

generator.setSize(QSize(this->width(), this->height()));

generator.setViewBox(QRect(, this->width(), this->height()));

generator.setTitle("SVG Example");

generator.setDescription("This SVG file is generated by Qt.");

paintAll(&generator);

}

void MainWindow::paintAll(QSvgGenerator *generator)

{

QPainter painter;

if (generator)

painter.begin(generator);

else

painter.begin(this);

// Draw Text

, QFont::Bold));

painter.drawText(QPoint(), "Hello Qt");

// Draw Line

));

// Draw Rectangle

painter.setBrush(Qt::BDiagPattern);

painter.drawRect(QRect());

// Draw Ellipse

QPen ellipsePen;

ellipsePen.setColor(Qt::red);

ellipsePen.setStyle(Qt::DashDotLine);

painter.setPen(ellipsePen);

painter.drawEllipse(QPoint();

// Draw Rectangle

QPainterPath rectPath;

rectPath.addRect(QRect());

painter.setPen(QPen(Qt::red, , Qt::DashDotLine, Qt::FlatCap,

Qt::MiterJoin));

painter.setBrush(Qt::yellow);

painter.drawPath(rectPath);

// Draw Ellipse

QPainterPath ellipsePath;

ellipsePath.addEllipse(QPoint();

painter.setPen(QPen(QColor(, Qt::SolidLine,

Qt::FlatCap, Qt::MiterJoin));

painter.setBrush(QColor());

painter.drawPath(ellipsePath);

painter.end();

}