如何用QGraphicsScene获得绝对坐标?

时间:2016-03-26 16:41:57

标签: qt qgraphicsitem qgraphicsscene

假设我有五个物体,左上角的红色正方形和较大的黑色正方形都插入到0,0的场景中。

A central object with 4 red smaller objects.  

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

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

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

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

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

欢迎任何帮助。请记住我的目标不是:“通过操纵器拖动箱子的角落”。我的目标是每当我希望某个项目位于特定坐标时,就可以将项目放在坐标处。

编辑:

这是我的意思的一个例子。大盒子尚未连接,所以不要担心它的坐标。问题是,如果我重新映射来自小方框的点,每个方框都认为它位于原点。但如果我,则y值在0,1和-1之间摇摆。

enter image description here

1 个答案:

答案 0 :(得分:1)

基类QGraphicsItem具有一些非常有用的功能,可用于场景和项目坐标之间的映射。一个有用的功能是将项目坐标中的点映射到场景坐标:

QPointF QGraphicsItem::mapToScene(const QPointF &point)

然而,不同QGraphicsItem s中的点之间也存在直接映射,这可能是最容易使用的:

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

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

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