zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【java】JDBC连接MySQL
    【java】网络socket编程简单示例
    【java】对象序列化Serializable、transient
    【java】扫描流Scanner接收输入示例
    【java】缓冲字符字节输入输出流:java.io.BufferedReader、java.io.BufferedWriter、java.io.BufferedInputStream、java.io.BufferedOutputStream
    【java】System成员输入输出功能out、in、err
    33-Java中的String,StringBuilder,StringBuffer三者的区别
    5-Error:failed to find Build Tools revision 28.0.0 rc1解决方案
    46-wxpython 4 使用 grid 展示表格
    45-暴力密码字典
  • 原文地址:https://www.cnblogs.com/logo-88/p/8328144.html
Copyright © 2011-2022 走看看