Qt SVG module

SVG(scalable vector graphics可缩放矢量图形)是基于可拓展标记语言(XML),用于描述二维矢量图形的一种图形格式。由W3C制定。是一种和图像分辨率无关的矢量图形格式。它与其他的图像格式相比优势在于:可以通过文本编辑器创建修改;可以被搜索、索引、脚本化或压缩;可伸缩;可以被任何分辨率下高清晰打印;可在图像质量不下降的情况下被放大。

使用QT SVG模块需要在.pro文件里添加QT += SVG 

这里简单介绍下Qt SVG的四个主要的类:

QGraphicsSvgItem

QGraphicsItem that can be used to render the contents of SVG files

QSvgGenerator

Paint device that is used to create SVG drawings

QSvgRenderer

Used to draw the contents of SVG files onto paint devices

QSvgWidget

Widget that is used to display the contents of Scalable Vector Graphics (SVG) files

QGraphicsSvgItem是QGraphicsObject的子类,它用来渲染SVG文件的内容。

QSvgGenerator是QPaintDevice的子类,它是用来绘制SVG的paint device。

QSvgRenderer是QObject的子类,它是用来画SVG文件内容到paint device的。

QSvgWidget是QWidget的子类,它是用来展示svg文件内容的窗体部件。

QGraphicsSvgItem提供一个方法将SVG文件渲染到QGraphicsView。QGraphicsSvgItem可以通过传递SVG文件到它的构造函数,或者显式设置shared QSvgRenderer到它上面。例如下面例子:

     QSvgRenderer *renderer = new QSvgRenderer(QLatin1String("SvgCardDeck.svg"));

     QGraphicsSvgItem *black = new QGraphicsSvgItem();

     QGraphicsSvgItem *red   = new QGraphicsSvgItem();

     black->setSharedRenderer(renderer);

     black->setElementId(QLatin1String("black_joker"));

     red->setSharedRenderer(renderer);

     red->setElementId(QLatin1String("red_joker"));

QGraphicsSvgItem提供了一个方法setElementId,只渲染被调用的SVG元素(及孩子元素)。

QSvgGenerator像一个QPrinter,它是个只写的设备,为了输出专门的格式的内容。为了写出SVG文件,需要先指定名称fileName或outputDevice属性。一般要设置size属性,有些情况需要viewBox属性。例如下面例子:

     QSvgGenerator generator;

     generator.setFileName(path);

     generator.setSize(QSize(200, 200));

     generator.setViewBox(QRect(0, 0, 200, 200));

     generator.setTitle(tr("SVG Generator Example Drawing"));

     generator.setDescription(tr("An SVG drawing created by the SVG Generator "

                                 "Example provided with Qt."));

     QPainter painter;

     painter.begin(&generator);

     ...

     painter.end();

使用QSvgRenderer可以渲染文件内容到任意QpaintDevice子类,包括QWidget, QImage, QGLWidget。

对于动画SVG绘制,可以使用animated()函数指明是否包含动画信息;使用framesPerSecond设置获取帧率。

最后,QSvgRenderer提供repaintNeeded()信号,当渲染文件需要被更新时发射。

转载处:http://blog.csdn.net/xuguangsoft/article/details/8577626

非学无以广才,非志无以成学! 【Magic_chao

原文地址:https://www.cnblogs.com/logo-88/p/8328144.html