有没有办法从SVG数据中获取正确的边界矩形,使用任何Qt库类?

时间:2013-10-24 10:16:38

标签: c++ qt

如果SVG数据的某些像素位于视图框外,我如何获得考虑这些像素的边界矩形。

典型的例子是这样的:

<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>

2 个答案:

答案 0 :(得分:0)

您应该能够使用QSvgRenderer获取最顶层元素ID的边界框(在本例中为#34; L.T.S.P&#34;)。

答案 1 :(得分:0)

我认为Wes的回答是正确的。但我认为这个问题可能会误导其他人关于svg视图表示的内容:坐标系之间转换的规范,而不是绘图被剪切到的边界框。 svg width和height属性定义边界框。对于您提供的svg数据,我认为由SVG使用者决定边界框,而QSvgRenderer会这样做。