使用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);
}
效果如下:
多谢,亲爱的美美。