保存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);
}

效果如下:

多谢,亲爱的美美。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值