如何映射项目坐标?
How to map item coordinates?
我知道每个项目都有自己相对于场景的坐标。我在场景中添加了一个椭圆。他们每个人 returns 以下来自 boundingRect(): QRect(0, 0, 50, 50)
。我不知道如何将坐标映射到另一个 QGraphicsItem
这是一条线。这条线应该连接这两个椭圆。我有正确的椭圆坐标,我将它们传递给自定义 QGraphicsLineItem
构造函数。但是,该行位于错误的位置。我应该如何使用mapFromItem()
或其他方法得到结果?
我得到每个椭圆的坐标如下:
selfCoords = ellipse->mapFromScene(QPointF(0.0,0.0));
您应该将每个椭圆的坐标映射到某个公共坐标系,然后您可以将其映射到直线的父坐标系。公共坐标系可以是场景的坐标系。
例如,要连接椭圆的中心:
QGraphicsScene scene;
QGraphicsEllipseItem e1, e2;
scene.addItem(&e1);
scene.addItem(&e2);
... // set the ellipse rects/sizes
auto start = e1.mapToScene(e1.boundingRect().center());
auto end = e2.mapToScene(e2.boundingRect().center());
QGraphicsLineItem l(QLineF(start, end));
scene.addItem(&l);
您可以这样做,因为线条的父级是场景。现在假设这条线有其他父级 - 您需要将坐标映射到该父级。
...
QGraphicsItem p;
p(20, 20);
scene.addItem(&p);
auto start = e1.mapToItem(&p, e1.boundingRect().center());
auto end = e2.mapToItem(&p, e2.boundingRect().center());
QGraphicsLineItem l(QLineF(start, end), &p);
如果我想在鼠标位置添加新的椭圆,如何将坐标映射到椭圆项目以在场景中获得正确的位置?例如从 contextMenuEvent
我得到
QPointF coords = event->scenePos();
然后我想创建椭圆。我有自定义 QGraphicsScene MyScene
,其中有指向 QGraphicsView* view
.
的指针
我使用事件形式void MyScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
QPointF coords = event->scenePos();
QPointF ellpiseCoords = view->mapToScene(coords .x(), coords .y())
我总是做错变换。
我知道每个项目都有自己相对于场景的坐标。我在场景中添加了一个椭圆。他们每个人 returns 以下来自 boundingRect(): QRect(0, 0, 50, 50)
。我不知道如何将坐标映射到另一个 QGraphicsItem
这是一条线。这条线应该连接这两个椭圆。我有正确的椭圆坐标,我将它们传递给自定义 QGraphicsLineItem
构造函数。但是,该行位于错误的位置。我应该如何使用mapFromItem()
或其他方法得到结果?
我得到每个椭圆的坐标如下:
selfCoords = ellipse->mapFromScene(QPointF(0.0,0.0));
您应该将每个椭圆的坐标映射到某个公共坐标系,然后您可以将其映射到直线的父坐标系。公共坐标系可以是场景的坐标系。
例如,要连接椭圆的中心:
QGraphicsScene scene;
QGraphicsEllipseItem e1, e2;
scene.addItem(&e1);
scene.addItem(&e2);
... // set the ellipse rects/sizes
auto start = e1.mapToScene(e1.boundingRect().center());
auto end = e2.mapToScene(e2.boundingRect().center());
QGraphicsLineItem l(QLineF(start, end));
scene.addItem(&l);
您可以这样做,因为线条的父级是场景。现在假设这条线有其他父级 - 您需要将坐标映射到该父级。
...
QGraphicsItem p;
p(20, 20);
scene.addItem(&p);
auto start = e1.mapToItem(&p, e1.boundingRect().center());
auto end = e2.mapToItem(&p, e2.boundingRect().center());
QGraphicsLineItem l(QLineF(start, end), &p);
如果我想在鼠标位置添加新的椭圆,如何将坐标映射到椭圆项目以在场景中获得正确的位置?例如从 contextMenuEvent
我得到
QPointF coords = event->scenePos();
然后我想创建椭圆。我有自定义 QGraphicsScene MyScene
,其中有指向 QGraphicsView* view
.
我使用事件形式void MyScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
QPointF coords = event->scenePos();
QPointF ellpiseCoords = view->mapToScene(coords .x(), coords .y())
我总是做错变换。