• 970阅读
  • 0回复

[提问]Qt显示svg各个图层,各个图层的相对位置不对 [复制链接]

上一主题 下一主题
离线2668629310@q
 

只看楼主 倒序阅读 楼主  发表于: 2022-04-07
在使用QT的QGraphicsScene类和QGraphicsSvgItem类的setElementId()函数来显示同一svg文件的不同图层,图层的位置都跑到画布scene的左上角也就是左对齐加上对齐,不用setElementId()函数设置图层时,显示的是svg文件的所有图层的叠加图,这时候图层的相对位置不变,分图层显示怎么让给图层保持原本的位置。
svg文件格式如下:
  1. <g id="layer0" slic3r:z="2.5e-007">
  2.     <polygon slic3r:type="contour" points="16.752857,20..................372 65.814172,29.993522 65.631649,29.393954 64.940528,27.123678 16.752857,27.123678 16.752857,47.865316 0,47.865316 0,0 16.752857,0" style="fill: white" />
  3.   </g>
  4.   <g id="layer1" slic3r:z="6.5e-007">
  5.     <polygon slic3r:type="contour" points="16.752857,............................40528,27.123678 16.752857,27.123678 16.752857,47.865316 0,47.865316 0,0 16.752857,0" style="fill: white" />
  6.   </g>
  7.   <g id="layer2" slic3r:z="9.5e-007">
  8.     <polygon slic3r:type="contour" points="16.7528579303..................875985,33.487687 67.160823,32.573921 66.626274,31.549639 65.814171,29.993521 65.12059,27.715168 64.940528,27.123678 16.752857,27.123678 16.752857,47.865316 0,47.865316 0,0 16.752857,0" style="fill: white" />
  9.   </g>
我使用的方法是:先利用打开读取svg文件的内容,然后利用正则表达式提取svg文件中的图层id,也就是layer0,1,1这些,然后放入容器中,接着创建QGraphicsScene类对象和QGraphicsSvgItem类对象并使用其成员函数setElementId()来显示不同图层。当时各图层出现左对齐加上对齐的现象,使用boundingRect函数获取出各图层的x,y,w,h是不同的。
求解惑
快速回复
限100 字节
 
上一个 下一个