Qt:QGraphicsLineItem在QGraphicsScene中的位置

时间:2013-08-03 19:31:13

标签: c++ qt qgraphicsscene

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

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

此代码以正确的位置绘制线条,但其坐标设置为(0,0)而不是(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谢谢!

2 个答案:

答案 0 :(得分:2)

每个图形项目的初始位置为(0, 0)。您可以使用setPos设置新位置。其所有内容将根据新职位进行调整。

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

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

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

答案 1 :(得分:1)

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

  

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