2

我在确定 的位置时遇到问题QGraphicsLineItem。我想相对移动场景中的物品,所以我需要知道它们的位置。我的QGraphicsPixmapItem对象很少,而且我对它们没有任何问题,因为pixmapItem.pos()给了我场景坐标中每个项目的真实位置。但是使用 QGraphicsLineItemsi 为每一行获得相同的坐标 (0,0)。这是代码:

QGraphicsLineItem*line = new QGraphicsLineItem();
scene->addItem(line);
line->setLine(QLineF(0,VVR-i*(OH),HVR,VVR-i*(OH)));

此代码在正确位置绘制线条,但其坐标设置为(0,0)not (0,VVR-i*(OH))

当行项目到达大于 VVR 的位置时,以下代码应将行项目移动 (VVR + OH)。但是由于所有行都有起始位置(0,0),所以无论我把它们放在哪里,所有行都会同时移动。

QPointF current_pos = line->pos();
if (current_pos.y() >= VVR)
{
    line->setPos(current_pos.x(),current_pos.y()-(VVR+(OH)));
}

我怎样才能得到 的真实(场景)坐标,QGraphicsLineItem谢谢QGraphicsPixmapItem

4

2 回答 2

5

每个图形项的初始位置为(0, 0)。您可以使用 设置其新位置setPos。它的所有内容都将根据新的位置移动。

setLine不会改变项目位置。此方法改为更改项目所代表的对象。例如,对象可以是(0, 5) - (5, 5)线。如果您没有设置项目位置,则位置保持在(0, 0)并且行显示在(0, 5) - (5, 5)。如果您设置例如 position (2, 0),该行将移动到(2, 5) - (7, 5)位置。有与setLine其他基本图形项目类(例如QGraphicsPixmapItem::setOffset)类似的方法。

如果要获取之前设置的行位置setLine(),使用line()方法。如果您使用 移动项目setPos(),请使用pos()

另外,由于您说要相对移动场景中的物品,所以我想提一下以下事实。如果您为一个项目设置了一个父项目,它的位置将相对于父项目计算。你可能会发现它很有用。

于 2013-08-03T23:14:02.107 回答
2

虽然要求“lineitem 的行”有点奇怪,但我相信你想要:

QPointF current_pos = line->line().p1();

于 2013-08-03T19:45:03.177 回答