从QSvgRenderer获取SVG大小

时间:2018-04-16 21:25:02

标签: qt qt5 qtsvg

假设我有一个类似这样的SVG:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   version="1.1"
   viewBox="0 0 100 200"
   height="600mm"
   width="300mm">
...

使用QSvgRenderer::viewBoxF()我可以获取0 0 100 200视图框,但有没有办法获取width="300mm"height="600mm"

(除了我自己解析XML的显而易见的事情。)

1 个答案:

答案 0 :(得分:0)

我已经阅读了源代码。见QSvgHandler::createSvgNode()。行为是这样的:

QSvgRenderer::viewBoxF()以用户定义的单位返回viewBox属性。

QSvgRenderer::defaultSize()会读取widthheight属性(如果存在)。如果单位为cminmm,则会将其乘以适当的值,以提供分辨率为90 DPI的像素。例如,如果in则将其乘以90,mm乘以90 / 25.4,依此类推。其他单位 - pxpt甚至%保持原样。 defaultSize()使用整数,因此其分辨率为1/90英寸。

如果widthheight ,则defaultSize()会以用户定义的单位返回viewBox的大小。

这是一种非常特殊和复杂的行为,并不适合我的用例,因此我认为我只需要解析XML两次(或者无论如何都要解析它)。