可缩放矢量图形(SVG)是一种用XML描述二维图形和图形应用的语言。

Qt SVG提供了用于呈现SVG文件的类。要包含模块类的定义

#include <QtSvg>

要链接到模块,请将此行添加到qmake.pro文件中:QT += svg

允许在Qt支持的所有绘画设备上呈现SVG文件,包括QWidget、QGLWidget和QImage。

Qt提供了用于在小部件和其他绘制设备中呈现和显示SVG图形的类。

QGraphicsSvgItem

QGraphicsItem,可用于呈现SVG文件的内容,可以细化拆分Svg的元素。QGraphicsSvgItem类是一个QGraphicsItem的子类,可以在QGraphicsView显示svg文件。

QGraphicsSvgItem可以通过将要呈现的SVG文件传递给其构造函数或通过在其上显式设置共享的QSvgRenderer来创建。

void Widget::readbuttonslot()
{QString filePath = QFileDialog::getOpenFileName(0, "打开文件", ".", "SVG(*.svg)");if(filePath.isEmpty()){return;}QSvgRenderer *renderer = new QSvgRenderer(filePath);QGraphicsSvgItem *blackSvgItem = new QGraphicsSvgItem();blackSvgItem->setSharedRenderer(renderer);m_scene->addItem(blackSvgItem);blackSvgItem->setFlags (QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable);
}
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{m_scene = new MyGraphicsScene;m_view = new QGraphicsView(this);m_view->setScene(m_scene);m_view->setGeometry(500,100,300,600);m_view->setAcceptDrops(true);m_view->show();QPushButton *pReadbutton = new QPushButton(tr("加载svg"),this);pReadbutton->setGeometry(10,height()-50,60,40);connect(pReadbutton,SIGNAL(clicked()),this,SLOT(readbuttonslot()));
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = nullptr);~Widget();MyGraphicsScene * m_scene;QGraphicsView *m_view;private:Ui::Widget *ui;protected:void paintEvent(QPaintEvent *event);QSvgRenderer* svgRender;
public slots:void readbuttonslot();void writebuttonslot();};

QSvgGenerator

用于创建SVG图形的绘制设备,主要用于保存的时候使用,注意保存到时候直接使用局部变量即可,使用全局变量其没有析构反倒不会保存。

要编写SVG文件,首先需要通过设置文件名或outputDevice属性来配置输出。通常需要通过设置“大小”特性来指定图形的大小,在某些情况下,如果图形将包含在另一个图形中,则还需要设置“viewBox”特性。其他元数据可以通过设置标题、描述和分辨率属性来指定。与其他QPaintDevice子类一样,QPainter对象用于绘制此类的实例。// 无需在paintEvent函数中。相当于把paintevent画图导出保存成svg文件。

QPainter painter;
painter.begin(&generator);
// 此处绘制的内容就是保存为svg文件的内容
painter.end();
void Widget::writebuttonslot()
{QString filePath = QFileDialog::getSaveFileName(0, "打开文件", ".", "SVG(*.svg)");if(filePath.isEmpty()){return;}QSvgGenerator svgGenerator;svgGenerator.setFileName(filePath);svgGenerator.setSize(QSize(rect().width(), rect().height()));svgGenerator.setViewBox(rect()); svgGenerator.setTitle("测试QSvgGenerator");svgGenerator.setDescription("另存为绘制测试");QPainter painter;painter.begin(&svgGenerator);painter.setPen(Qt::red);painter.drawLine(QPointF(20,20),QPointF(100,100));painter.drawText(rect(), "测试Svg");QPixmap pixmap = this->grab(QRect(0, 0, 1000, 800));painter.drawPixmap(10,10,pixmap);painter.end();
}QPushButton *pWritebutton = new QPushButton(tr("保存svg"),this);pWritebutton->setGeometry(100,height()-50,60,40);connect(pWritebutton,SIGNAL(clicked()),this,SLOT(writebuttonslot()));

QSvgRenderer

用于将SVG文件的内容绘制到绘图设备上,其是打开svg将其渲染到QPixmap等上面。使用QSvgRenderer,可缩放矢量图形(SVG)可以呈现到任何QPaintDevice子类上,包括QWidget、QImage和QGLWidget。

一般用于QWidget的PaintEvent函数。

  1. SVG图形可以在构造QSvgRenderer时加载,也可以稍后使用load()函数加载。

  1. QWidget的PaintEvent函数上,QSvgRenderer对象调用render函数展示svg图形。

Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);svgRender = new QSvgRenderer(this);bool ret = svgRender->load(QString("G:/opencode/qt/msvc/test/drag/arrow.svg"));
}void Widget::paintEvent(QPaintEvent *event)
{QPainter p(this);svgRender->render(&p,QRectF(0,0,100,100));
}

QSvgWidget

用于显示可缩放矢量图形(SVG)文件内容的小部件,直接加载svg文件,即可显示

将SVG图形与标准小部件一起显示,并且使用的方式与QLabel用于显示文本和位图图像的方式基本相同。

#include <QWidget>
#include <QSvgWidget>
#include <QSvgRenderer>class MySvgWidget :public QWidget
{Q_OBJECT
public:MySvgWidget(QWidget *parent = 0);~MySvgWidget();QString filePath;QSvgWidget *pSvgWidget;QSvgRenderer  *pSvgRenderer;void load(const QString &strfile);};#include "MySvgWidget.h"MySvgWidget::MySvgWidget(QWidget *parent):QWidget(parent)
{pSvgWidget = new QSvgWidget(this);pSvgRenderer = pSvgWidget->renderer();}MySvgWidget::~MySvgWidget()
{}void MySvgWidget::load(const QString &strfile)
{pSvgWidget->load(strfile);pSvgWidget->repaint();update();
}MySvgWidget *psvgwidget;psvgwidget = new MySvgWidget(this);psvgwidget->setGeometry(200,0,200,200);psvgwidget->show();psvgwidget->load(QString("G:/opencode/qt/msvc/test/drag/arrow.svg"));

qt svg文件的读取和保存相关推荐

  1. QT写入文件与读取文件内容

    QT写入文件与读取文件内容 QT写入文件与读取文件内容-C++文档类资源-CSDN下载QT写入文件与读取文件内容更多下载资源.学习资料请访问CSDN下载频道.https://download.csdn ...

  2. 利用Python+opencv进行视频文件的读取和保存,打开笔记本摄像头拍照保存、图像在窗口显示等操作

    版权声明:本文为博主原创文章,转载请附源链接 一.视频文件的读取和保存 Opencv中视频的读入是用VideoCapture函数,保存用的是VideoWriter函数.这两个函数支持的视频格式因电脑系 ...

  3. 【OpenCV 例程 300篇】252.视频文件的读取与保存

    『youcans 的 OpenCV 例程300篇 - 总目录』 [youcans 的 OpenCV 例程 300篇]252. 视频文件的读取与保存 视频文件是由一系列图像组成的,视频的每一帧都是一幅图 ...

  4. C++和Python,JSON文件的读取和保存

    1. Python python很简单,因为python自带json包,所以只要import就可以,具体使用如下. import json#保存json文件 root = {'Exp':[], 'Ex ...

  5. python保存mat文件_python读取文件——python读取和保存mat文件

    首先我们谈谈MarkDown编辑器,我感觉些倒是挺方便的,因为用惯了LaTeX,对于MarkDown还是比较容易上手的,但是我发现,MarkDown中有这样几个问题一直没能找到具体的解决方法:图片大小 ...

  6. python保存为mat文件_python读取文件——python读取和保存mat文件-Go语言中文社区

    首先我们谈谈MarkDown编辑器,我感觉些倒是挺方便的,因为用惯了LaTeX,对于MarkDown还是比较容易上手的,但是我发现,MarkDown中有这样几个问题一直没能找到具体的解决方法: 图片大 ...

  7. python读视频文件_python读取和保存视频文件

    如何用python实现视频关键帧提取并保存为图片?也许你会觉得对小编多做一点事你会觉得你很爽,可是在小编看来这是不屑的 import cv2vc = cv2.VideoCapture('Test.av ...

  8. Java 读取txt文件,读取结果保存到数据库

    需求:有一个很大的txt文件(1,000,000条数据),从txt中读取有用数据库后保存到Oracle数据库中 利用Java实现: 1.加载文件后一行一行读取 2.数据库连接后按行插入到数据库 pac ...

  9. lmdb文件的读取和保存

    LMDB的全称是Lightning Memory-Mapped Database,它的文件结构简单,包含一个数据文件和一个锁文件. LMDB文件可以同时由多个进程打开,具有极高的数据存取速度,访问简单 ...

最新文章

  1. Linux目录与文件常见处理命令
  2. boost::log::make_exception_handler用法的测试程序
  3. Opencv3编程入门学习笔记(二)之显式创建Mat对象
  4. Docker解析及轻量级PaaS平台演练(一)--Docker简介与安装
  5. .NET异步编程之新利器——Task与Await、Async
  6. Win 7 通过事件管理器查看计算机开机关机时间
  7. 中科院大学计算机研究生考试大纲,中国科学院大学《计算机原理》2019年硕士研究生入学考试大纲...
  8. 禁用当前的账户win7_系统小技巧:服务客人 开启Windows 10来宾账户
  9. OJ1000: A+B Problem
  10. base64还原_冰蝎3.0流量分析与还原
  11. Python | 多线程死锁问题的巧妙解决方法
  12. WP7开发第一课:软件生命周期(其二)
  13. 关于Jmeter关联,从概念讲起
  14. flink API之Sink入门
  15. WordPress安装插件提示输入FTP账户信息
  16. python3实现国密SM4算法
  17. FOC中的Clarke变换和Park变换详解(动图+推导+仿真+附件代码)
  18. CSS实现兼容浏览器的文字阴影效果
  19. 《管理学》第八章 领导
  20. [剑指offer] -- 46.扑克牌顺子

热门文章

  1. 输入框连续删除,光标闪烁问题
  2. 资源帖丨从推荐算法到前端开发,这是字节跳动技术Leader们最中意的40项学习资源
  3. C语言生成随机数和随机数组
  4. CAD/CASS批量桩号里程标注插件(6种模式)
  5. 银行计算机信息系统安全检查,银行网络安全自查报告.docx
  6. jest使用es6语法
  7. C语言输出菱形图案(二维数组)
  8. 最新版百度网盘,下载提速方法
  9. 计算机键盘毕业设计,毕业论文--智能键盘设计方案.doc
  10. 视频编解码(h.264)的一些资源