我在确定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
谢谢!
答案 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();