2013-10-24 21 views
1

如果SVG数据的某些像素位于视图框外,如何获得考虑这些像素的边界矩形。有没有办法从SVG数据中使用任何Qt库类获取正确的边界矩形?

一个典型的例子是这样的:

<svg id="L.T.S.P" width="100%" height="100%" viewBox="0 0 160 160" version="1.1" baseProfile="full" preserveAspectRatio="xMinYMin meet" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><title>layer</title> 
<desc>My Picture</desc> 
<ellipse cx="80" cy="80" rx="60" ry="60" fill="none" stroke="rgb(139, 69, 19)" stroke-width="2"/> 
<text x="80" y="102" text-anchor="middle" font-family="Arial" font-size="48pt" fill="rgb(139, 69, 19)" stroke="rgb(139, 69, 19)" stroke-width="0.25" style="direction: ltr; unicode-bidi: bidi-override;">T</text> 
<g id="port" transform="matrix (1.22e-017, -0.2, 0.2, 1.22e-017, -20, 100)"><polygon points="60,**180** 140,180 160,200 160,40 140,20 60,20 40,40 40,200" fill="none" stroke="rgb(139, 69, 19)" stroke-width="10"/> 
<polyline points="60,60 140,60" fill="none" stroke="rgb(139, 69, 19)" stroke-width="10" stroke-dasharray=""/> 
<polyline points="60,100 140,100" fill="none" stroke="rgb(139, 69, 19)" stroke-width="10" stroke-dasharray=""/> 
<polyline points="60,140 140,140" fill="none" stroke="rgb(139, 69, 19)" stroke-width="10" stroke-dasharray=""/> 
<polyline points="100,20 100,0" fill="none" stroke="rgb(139, 69, 19)" stroke-width="10" stroke-dasharray=""/> 
</g> 
<g id="inputTemperature" transform="matrix (-0.2, -2.45e-017, 2.45e-017, -0.2, 180, 100)"><polyline points="0,100 200,100 80,40" fill="none" stroke="rgb(255, 0, 0)" stroke-width="10" stroke-dasharray=""/> 
<polyline points="80,160 200,100" fill="none" stroke="rgb(255, 0, 0)" stroke-width="10" stroke-dasharray=""/> 
</g> 
</svg> 

回答

0

你应该能够使用QSvgRenderer得到的最顶端元素的id边框(在这种情况下,“L.T.S.P”)。

0

我认为韦斯的回答是正确的。但是我认为这个问题可能会误导其他人了解svg视图框所代表的内容:坐标系之间的转换规范,而不是图形所剪辑的边界框。 svg宽度和高度属性定义边界框。对于您提供的svg数据,我认为由SVG使用者决定边界框,而QSvgRenderer会这样做。

相关问题