QT中显示的svg文件图元的位置怎么调整

在使用QT的QGraphicsScene类和QGraphicsSvgItem类的setElementId()函数来显示同一svg文件的不同图层,图层的位置都跑到画布scene的左上角,怎么让给图层保持原本的位置。

img


图中n1和n2原本应该在圈定矩形的上层才对,可使用setElementId()显示相应的图层后,位置都跑到了左上角
svg文件内容如下:

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