标题:QSvgRenderer无法解析symbol标签吗
作者:yleesun
日期:2016-03-23 15:52
内容:
最近在研究QSvgRenderer解析svg文件。定义的的SVG文件如下:
解析代码:
QSvgRenderer *renderer = new QSvgRenderer(fileName);
QGraphicsSvgItem *black = new QGraphicsSvgItem();
black->setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable);
black->setSharedRenderer(renderer);
black->setElementId(QLatin1String("s1"));
black->setPos(100,25);
  ..
#1 [abelsky 03-24 20:29]
#2 [yleesun 04-12 22:31]
看来坛子里的高手们太懒了,没有一个赐教的!好吧,问题还得自己想办法解决,在此分享一下,不正确的地方,望高手指正!
解决以上问题有两种方法:
一:把symbol标签替换为g标签。g标签和symbol标签都可以用来定义重复使用的图形,但是symbol功能更加强大,支持viewbox等属性,而g标签不支持。
这种方法,通常viewbox定义从0 0开始,一般不会有问题,但是如果遇到viewbox不是从0 0 开始,那就悲剧了,发现解析后的图元的位置,总是差那一点点。感觉很接近成功了,但是总是差那么一小步。
二:修改qsvg源码,增加对symbol标签的支持。
这个方法比较复杂一些,可以彻底解决问题。不知道qt官方,为什么不提供该功能。
大致原理就是在qsvghandler解析svg的时候,把viewbox属性解析出来,存在qsvgnode的属性中,这个属性也需要自己添加。然后再解析的时候,在根据有没有坐标变换,判断如果使用这个viewbox。
基本就是这样!