【问题标题】:How to get absolute coordinates with QGraphicsScene?如何使用 QGraphicsScene 获取绝对坐标?
【发布时间】:2016-03-26 16:41:56
【问题描述】:

假设我有五个对象,左上角的红色方块和较大的黑色方块都在 0,0 处插入场景。

.

稍后,假设我想将黑色方块的右下角移动到右下角方块的右下角。最明显的做法是:

bS.setRect(bS.rect().setBottomRight(redBR.rect().bottomRight));

这不是完全正确的代码,但想法很简单。我会将黑色方块右下角的坐标设置为红色方块右下角的坐标。 因为那是我想要的。但在 Qt 中,这似乎是不可能的。

因为对 redBR 的调用认为它在原点。 每个项目都认为它在原点。这意味着我永远无法知道任何项目的坐标,任何地方,永远。

有没有办法强制 QGraphicsScene 告诉我实际坐标? 或者,是否有其他一些使用真实坐标的图形框架?如果没有办法让它工作,我不会坚持使用 Qt。

欢迎任何帮助。请记住我的目标不是:“通过机械手拖动盒子的角落”。我的目标是能够在我希望某个项目位于特定坐标时将项目放置在坐标上。

编辑:


这是我的意思的一个例子。大盒子还没有连接上,不用担心它的坐标。问题是,如果我 重新映射从小盒子出来的点,每个盒子都会认为它位于原点。但是如果我这样做,那么 y 值会在 0、1 和 -1 之间摇摆不定。

【问题讨论】:

  • 您能否再提供一张代表您想要的结果的图片?之前和之后的某个时间。
  • 我用一张新图片编辑了我的帖子,它显示了原始 pos 值以及在其上调用 mapFromScene 或 mapFromParent 后的值。

标签: qt qgraphicsitem qgraphicsscene


【解决方案1】:

基类QGraphicsItem 具有相当有用的功能,用于在场景和项目坐标之间进行映射。一个有用的功能是将项目坐标中的一个点映射到场景坐标:

QPointF QGraphicsItem::mapToScene(const QPointF &point)

不过,不同QGraphicsItems 中的点之间也有直接映射,这可能是这里最容易使用的:

QPointF QGraphicsItem::mapFromItem(const QGraphicsItem *item, const QPointF &point)

可用于将 redBR 中的一个点映射到 bS 中的一个点,例如:

bS.rect().setBottomRight(bS.mapFromItem( &redBR, redBR.rect().bottomRight() ) )

【讨论】:

  • 我认为您的回答与我实际提出的问题有关。我想我问错了问题。我真正的问题是我正在创建带有坐标的小盒子,而不是创建 then 设置 pos。所以,由于 API 的怪异,它们真的都在原点。
猜你喜欢
  • 2014-04-04
  • 2016-11-19
  • 2014-08-30
  • 2013-01-27
  • 1970-01-01
  • 2015-05-05
  • 1970-01-01
  • 2013-06-29
  • 1970-01-01
相关资源
最近更新 更多