假设我有五个物体,左上角的红色正方形和较大的黑色正方形都插入到0,0的场景中。
稍后,假设我想将黑色方块的右下角移动到右下方的右下角。最明显的事情是:
bS.setRect(bS.rect()。setBottomRight(redBR.rect()。bottomRight));
这不是完全正确的代码,但这个想法很简单。我会将黑色方块右下角的坐标设置为红色方块右下角的坐标。 因为那就是我想要的地方。但在Qt中,这似乎是不可能的。
因为对redBR的调用认为它在原点。 每个项目都认为它在原点。这意味着我永远无法知道任何项目的坐标。
有没有办法迫使QGraphicsScene告诉我实际的坐标? 或者,是否有其他图形框架使用真实坐标?如果没有办法让它工作,我不会坚持使用Qt。
欢迎任何帮助。请记住我的目标不是:“通过操纵器拖动箱子的角落”。我的目标是每当我希望某个项目位于特定坐标时,就可以将项目放在坐标处。
这是我的意思的一个例子。大盒子尚未连接,所以不要担心它的坐标。问题是,如果我不重新映射来自小方框的点,每个方框都认为它位于原点。但如果我做,则y值在0,1和-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()))