在使用QT的QGraphicsScene类和QGraphicsSvgItem类的setElementId()函数来显示同一svg文件的不同图层,图层的位置都跑到画布scene的左上角,怎么让给图层保持原本的位置。
<g id="layer0" slic3r:z="2.5e-007">
<polygon slic3r:type="contour" points="16.7528..................316 0,47.865316 0,0 16.752857,0" style="fill: white" />
</g>
<g id="layer1" slic3r:z="6.5e-007">
<polygon slic3r:type="contour" points="16.75285.................7,0" style="fill: white" />
</g>
<g id="layer2" slic3r:z="9.5e-007">
<polygon slic3r:type="contour" points="16.752857,20.741636 64.940528,20.741.......................857,0" style="fill: white" />
</g>
求解惑
你的代码可否贴出来看一下,没有代码也不知道你怎么显示多层的。
因为多层layout布局的原因,layout布局会有个margin,默认为11px。
当你通过setElementId()
函数选中不同图层时,boundingRect()
返回的是那个图层的bounding box。每个图层的bounding box可能不一样,这就导致了显示时会错位。你要么为每个图层设置相同的bounding box,要么根据图层的bounding box和整个svg的bounding box来计算该图层相对于整个svg的偏移,然后通过setTransform()函数把图层移到相应的位置。
把图像放在一起,style可以设置位置
<g id="layer0" slic3r:z="2.5e-007">
<polygon slic3r:type="contour" points="16.7528..................316 0,47.865316 0,0 16.752857,0" style="fill: white" />
<polygon slic3r:type="contour" points="16.75285.................7,0" style="fill: white" />
<polygon slic3r:type="contour" points="16.752857,20.741636 64.940528,20.741.......................857,0" style="fill: white" />
</g>