QGraphicsView:如何高效获取QGraphicsItems的视口坐标?

Posted

技术标签:

【中文标题】QGraphicsView:如何高效获取QGraphicsItems的视口坐标?【英文标题】:QGraphicsView: How to efficiently get the viewport coordinates of QGraphicsItems? 【发布时间】:2012-02-07 01:03:54 【问题描述】:

有没有一种快速的方法来获取 QGraphicsView 中 QGraphicsItems 的视口坐标?我能想到的唯一方法是调用 QGraphicsView::items(),然后调用 QGraphicsItem::pos(),然后调用 QGraphicsView::mapFromScene。

不过,我一定遗漏了一些东西,因为项目已经转换为视口坐标以在 QGraphicsView 上正确定位它们,因此使用 mapFromScene 再次将其转换为视口坐标似乎效率低下——尤其是因为在我的情况下,这种情况经常发生并且对于许多项目。有没有更直接的方法?

【问题讨论】:

【参考方案1】:

可能不会。一个QGraphicScene 可以同时被多个QGraphicsView 渲染。只保留一组视口坐标是没有意义的。

还有。 QGraphicsItems 之间的所有操作都直接在场景坐标中计算。来自视口的事件在处理之前转换为场景。关闭仅基于整数的视口也会降低精度。 QGraphicsView 只是一个场景的数学模型的表示。这不是实际模型。

也许你可以问一个更具体的问题,说明你到底想要完成什么。在场景坐标中可能有更好的方法。

【讨论】:

以上是关于QGraphicsView:如何高效获取QGraphicsItems的视口坐标?的主要内容,如果未能解决你的问题,请参考以下文章

qt获取滚动视图位置

如何从 qgraphicsview 中的 qgraphicsitem 获取不同的上下文菜单?

获取 QGraphicsView 的更新大小

QT:我需要通过 QGraphicsScene 获取添加到 QGraphicsView 的图像坐标

使用QGraphicsView实现气泡聊天窗口+排雷

在 QGraphicsView 中获取 QGraphicsScene 的可见区域 [重复]