位图和矢量图:
Bitmap:
- Usually a larger file size
- Cannot be enlarged into a higher resolution as the image quality will be affected
- Used to display complex images with many colors, such as photographs
Vector:
- Very small in file size
- Graphics can be resized without affecting the image quality
- Only a limited amount of color can be applied to each shape (single color, gradient, or pattern)
- Complex shapes require high-processing power to be generated
新建基于Widget的应用程序,继承于QMainWindow
MainWindow.h
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#ifndef
MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QPainter> #include <QMenuBar> #include <QtSvg/QSvgGenerator> #include <QFileDialog> class MainWindow : public QMainWindow { Q_OBJECT public : MainWindow(QWidget *parent = 0 ); ~MainWindow(); virtual void paintEvent(QPaintEvent *event); public slots: void actionSaveAsSVG(); private : void paintAll(QSvgGenerator *generator = nullptr); }; #endif // MAINWINDOW_H |
MainWindow.cpp
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
#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( 0 , 0 , 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 painter.setFont(QFont( "Times" , 14 , QFont::Bold)); painter.drawText(QPoint( 20 , 40 ), "Hello Qt" ); // Draw Line painter.drawLine(QPoint( 50 , 70 ), QPoint( 100 , 100 )); // Draw Rectangle painter.setBrush(Qt::BDiagPattern); painter.drawRect(QRect( 40 , 120 , 80 , 30 )); // Draw Ellipse QPen ellipsePen; ellipsePen.setColor(Qt::red); ellipsePen.setStyle(Qt::DashDotLine); painter.setPen(ellipsePen); painter.drawEllipse(QPoint( 80 , 200 ), 50 , 20 ); // Draw Rectangle QPainterPath rectPath; rectPath.addRect(QRect( 150 , 30 , 100 , 50 )); painter.setPen(QPen(Qt::red, 1 , Qt::DashDotLine, Qt::FlatCap, Qt::MiterJoin)); painter.setBrush(Qt::yellow); painter.drawPath(rectPath); // Draw Ellipse QPainterPath ellipsePath; ellipsePath.addEllipse(QPoint( 200 , 120 ), 50 , 20 ); painter.setPen(QPen(QColor( 79 , 106 , 25 ), 5 , Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); painter.setBrush(QColor( 122 , 163 , 39 )); painter.drawPath(ellipsePath); painter.end(); } |
Main.cpp
1
2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include
"MainWindow.h"
#include <QApplication> int main( int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.resize( 640 , 480 ); w.show(); return a.exec(); } |
编译运行
另存为svg文件