假设我有一个类似这样的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的显而易见的事情。)
答案 0 :(得分:0)
我已经阅读了源代码。见QSvgHandler::createSvgNode()
。行为是这样的:
QSvgRenderer::viewBoxF()
以用户定义的单位返回viewBox
属性。
QSvgRenderer::defaultSize()
会读取width
和height
属性(如果存在)。如果单位为cm
,in
或mm
,则会将其乘以适当的值,以提供分辨率为90 DPI的像素。例如,如果in
则将其乘以90,mm
乘以90 / 25.4,依此类推。其他单位 - px
,pt
甚至%
保持原样。 defaultSize()
使用整数,因此其分辨率为1/90英寸。
如果width
和height
不,则defaultSize()
会以用户定义的单位返回viewBox的大小。
这是一种非常特殊和复杂的行为,并不适合我的用例,因此我认为我只需要解析XML两次(或者无论如何都要解析它)。