SVG(scalable vector graphics可缩放矢量图形)是基于可拓展标记语言(XML),用于描述二维矢量图形的一种图形格式。由W3C制定。是一种和图像分辨率无关的矢量图形格式。它与其他的图像格式相比优势在于:可以通过文本编辑器创建修改;可以被搜索、索引、脚本化或压缩;可伸缩;可以被任何分辨率下高清晰打印;可在图像质量不下降的情况下被放大。
使用QT SVG模块需要在.pro文件里添加QT += SVG
这里简单介绍下Qt SVG的四个主要的类:
QGraphicsItem that can be used to render the contents of SVG files |
|
Paint device that is used to create SVG drawings |
|
Used to draw the contents of SVG files onto paint devices |
|
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