Qt QGraphicsSvgItem 渲染太大(每边 0.5 单位)

发布于 2024-12-06 12:15:55 字数 371 浏览 2 评论 0原文

如果我在 (0, 0) 处以 64x64 绘制 SVG 项目,则实际显示的 SVG 项目是从 (-0.5, -0.5) 处以 65x65 绘制的。我通过在 SVG 项目后面绘制边界框来测量这一点。并且 SVG 项目在 QGraphicsScene 上向各个方向伸出半个单位。

我可以去掉这个效果吗?我已将笔设置为 NoPen。 我可以将其缩小,但这会非常不精确(因为宽度和高度需要不同的缩放比例,这几乎是不可能的)。我该如何解决这个问题?

在此处输入图像描述

如您所见,棕色框 (SVG) 突出在灰色区域(边界框)上方。使用 Inkscape 确认边界框。

谢谢

If I draw an SVG item at (0, 0) with 64x64, the actual displayed SVG item is from (-0.5, -0.5) with 65x65. I measured this by drawing the boundingbox behind the SVG item. And the SVG item is sticking out at all sides by a half unit on the QGraphicsScene.

Can I remove this effect? I have set the pen to NoPen.
I could scale it down, but that would be quite unprecise (since width and height need different scaling, which is hardly possible). How can I fix this issue?

enter image description here

As you can see, the brown boxes (SVG) stick out over the grey area (bounding box). The bounding box is confirmed with Inkscape.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

丶视觉 2024-12-13 12:15:55

使用转换找到解决方案:

QSvgRenderer *test = new QSvgRenderer(QLatin1String("test.svg"));

QGraphicsSvgItem *item = new QGraphicsSvgItem();
item->setSharedRenderer(test);
addItem(item);

// the following transformation is required if you want the SVG to be exactly on the spot and as big as it should be
item->setTransform(QTransform(test->viewBoxF().width() / (test->viewBoxF().width() + 1.0), 0.0, 0.0, test->viewBoxF().height() / (test->viewBoxF().height() + 1.0), 0.5, 0.5));

Found the solution using transform:

QSvgRenderer *test = new QSvgRenderer(QLatin1String("test.svg"));

QGraphicsSvgItem *item = new QGraphicsSvgItem();
item->setSharedRenderer(test);
addItem(item);

// the following transformation is required if you want the SVG to be exactly on the spot and as big as it should be
item->setTransform(QTransform(test->viewBoxF().width() / (test->viewBoxF().width() + 1.0), 0.0, 0.0, test->viewBoxF().height() / (test->viewBoxF().height() + 1.0), 0.5, 0.5));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文