如何使用 QGraphicsScene 获取绝对坐标?
How to get absolute coordinates with QGraphicsScene?
假设我有五个对象,左上角的红色方块和较大的黑色方块都插入场景中的 0,0。
.
稍后,假设我想将黑色方块的右下角移动到右下角方块的右下角。最明显的事情是:
bS.setRect( bS.rect().setBottomRight(redBR.rect().bottomRight));
这不是完全正确的代码,但这个想法很简单。我会将黑色方块右下角的坐标设置为红色方块右下角的坐标。 因为那是我想要的。但是在 Qt 中,这似乎是不可能的。
因为对 redBR 的调用认为它在原点。 每个项目都认为它在原点。这意味着我永远无法知道任何项目在任何地方的坐标。
有没有办法强制 QGraphicsScene 告诉我实际坐标? 或者,还有其他一些使用真实坐标的图形框架吗?如果没有办法让它工作,我不会坚持使用 Qt。
欢迎任何帮助。请记住我的目标不是:"drag corner of box by manipulator"。我的目标是能够在我希望项目位于特定坐标时将项目放在坐标处。
编辑:
这是我的意思的一个例子。大盒子还没有连起来,所以不用担心它的坐标。问题是,如果我 不 重新映射从小盒子出来的点,每个盒子都认为它在原点。但是如果我做,那么y值在0、1和-1之间摇摆。
基础 class QGraphicsItem
有一些非常有用的功能用于场景和项目坐标之间的映射。一个有用的函数是将项目坐标中的一个点映射到场景坐标:
QPointF QGraphicsItem::mapToScene(const QPointF &point)
然而,在不同 QGraphicsItem
中的点之间也可以直接映射,这可能是最容易在这里使用的:
QPointF QGraphicsItem::mapFromItem(const QGraphicsItem *item, const QPointF &point)
可用于将 redBR 中的点映射到 bS 中的点,例如:
bS.rect().setBottomRight(bS.mapFromItem( &redBR, redBR.rect().bottomRight() ))
假设我有五个对象,左上角的红色方块和较大的黑色方块都插入场景中的 0,0。
稍后,假设我想将黑色方块的右下角移动到右下角方块的右下角。最明显的事情是:
bS.setRect( bS.rect().setBottomRight(redBR.rect().bottomRight));
这不是完全正确的代码,但这个想法很简单。我会将黑色方块右下角的坐标设置为红色方块右下角的坐标。 因为那是我想要的。但是在 Qt 中,这似乎是不可能的。
因为对 redBR 的调用认为它在原点。 每个项目都认为它在原点。这意味着我永远无法知道任何项目在任何地方的坐标。
有没有办法强制 QGraphicsScene 告诉我实际坐标? 或者,还有其他一些使用真实坐标的图形框架吗?如果没有办法让它工作,我不会坚持使用 Qt。
欢迎任何帮助。请记住我的目标不是:"drag corner of box by manipulator"。我的目标是能够在我希望项目位于特定坐标时将项目放在坐标处。
编辑:
这是我的意思的一个例子。大盒子还没有连起来,所以不用担心它的坐标。问题是,如果我 不 重新映射从小盒子出来的点,每个盒子都认为它在原点。但是如果我做,那么y值在0、1和-1之间摇摆。
基础 class QGraphicsItem
有一些非常有用的功能用于场景和项目坐标之间的映射。一个有用的函数是将项目坐标中的一个点映射到场景坐标:
QPointF QGraphicsItem::mapToScene(const QPointF &point)
然而,在不同 QGraphicsItem
中的点之间也可以直接映射,这可能是最容易在这里使用的:
QPointF QGraphicsItem::mapFromItem(const QGraphicsItem *item, const QPointF &point)
可用于将 redBR 中的点映射到 bS 中的点,例如:
bS.rect().setBottomRight(bS.mapFromItem( &redBR, redBR.rect().bottomRight() ))