保存QPainter内容为SVG图片

使用svg的

#include <QtSvg/QSvgGenerator>

可以方便保存QPainter的内容。

要使用svg相关,要在.pro文件中加入

QT       += core gui svg

之后添加代码:

#include "mydialog2.h"
#include "ui_mydialog2.h"

#include <QPainter>
#include <QPainterPath>

#include <QDebug>

myDialog2::myDialog2(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::myDialog2)
{
    ui->setupUi(this);
}

myDialog2::~myDialog2()
{
    delete ui;
}

void myDialog2::paintEvent(QPaintEvent *event)
{
//    QPainter textPainter;
//    textPainter.begin(this);
//    textPainter.setFont(QFont("Times", 24, QFont::Bold));
//    textPainter.drawText(QPoint(50, 50), "测试");
//    textPainter.end();

//    QPainter linePainter;
//    linePainter.begin(this);
//    linePainter.drawLine(QPoint(50, 60), QPoint(100, 100));
//    linePainter.end();

//    QPen ellipsePen;;
//    ellipsePen.setColor(Qt::red);
//    ellipsePen.setStyle(Qt::DashDotLine);

//    QPainter ellipsePainter;
//    ellipsePainter.begin(this);
//    ellipsePainter.setPen(ellipsePen);
//    ellipsePainter.drawEllipse(QPoint(80, 200), 50, 20);
//    ellipsePainter.end();

//    QPainterPath rectPath;
//    rectPath.addRect(QRect(150, 20, 100, 50));
//    QPainter pathPainter;
//    pathPainter.begin(this);
//    pathPainter.setPen(QPen(Qt::red, 1, Qt::DashDotLine, Qt::FlatCap, Qt::MiterJoin));
//    pathPainter.setBrush(Qt::yellow);
//    pathPainter.drawPath(rectPath);
//    pathPainter.end();

//    QImage image;
//    image.load("D:/pic/lena.jpg");
//    QPainter imagePainter;
//    imagePainter.begin(this);
//    imagePainter.drawImage(QPoint(150, 150), image);
//    imagePainter.end();

    paintAll();
}

void myDialog2::paintAll(QSvgGenerator *generator)
{
    QPainter painter;
    if(generator)
        painter.begin(generator);
    else
        painter.begin(this);

//    QPainter textPainter;
//    textPainter.begin(this);
    painter.setFont(QFont("Times", 24, QFont::Bold));
    painter.drawText(QPoint(50, 50), "测试");
//    painter.end();

//    QPainter linePainter;
//    linePainter.begin(this);
    painter.drawLine(QPoint(50, 60), QPoint(100, 100));
//    linePainter.end();

    QPen ellipsePen;;
    ellipsePen.setColor(Qt::red);
    ellipsePen.setStyle(Qt::DashDotLine);

//    QPainter ellipsePainter;
//    ellipsePainter.begin(this);
    painter.setPen(ellipsePen);
    painter.drawEllipse(QPoint(80, 200), 50, 20);
//    ellipsePainter.end();

    QPainterPath rectPath;
    rectPath.addRect(QRect(150, 20, 100, 50));
//    QPainter pathPainter;
//    pathPainter.begin(this);
    painter.setPen(QPen(Qt::red, 1, Qt::DashDotLine, Qt::FlatCap, Qt::MiterJoin));
    painter.setBrush(Qt::yellow);
    painter.drawPath(rectPath);
//    pathPainter.end();

    QImage image;
    image.load("D:/pic/lena.jpg");
//    QPainter imagePainter;
//    imagePainter.begin(this);
    painter.drawImage(QPoint(150, 150), image);
//    imagePainter.end();

    painter.end();
}

void myDialog2::on_pushButton_clicked()
{
    qDebug() << "save image";

    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(0, 0, this->width(), this->height()));
    generator.setTitle("SVG Example");
    generator.setDescription("This SVG file is generated by Qt.");

    paintAll(&generator);
}

效果如下:

多谢,亲爱的美美。

猜你喜欢

转载自blog.csdn.net/islinyoubiao/article/details/113750945