0

假设我有一个像这样的 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"and height="600mm"

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

4

1 回答 1

0

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

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

QSvgRenderer::defaultSize()读取widthandheight属性(如果存在)。如果单位是cmin或者mm将它们乘以适当的值,以得到分辨率为 90 DPI 的像素。例如,如果in然后乘以 90、mm乘以 90/25.4 等等。其他单位 - pxpt甚至%保持原样。defaultSize()使用整数,因此其分辨率为 1/90 英寸。

如果widthand存在,height则以用户定义的单位返回 viewBox 的大小。defaultSize()

这是相当临时和复杂的行为,不适合我的用例,所以我认为我只需要解析 XML 两次(或者无论如何解析 XML 的第一个位)。

于 2018-04-17T16:24:16.793 回答