[英]Qt: QGraphicsLineItem position in QGraphicsScene
我在确定QGraphicsLineItem
位置时遇到问题。 我想相对移动场景中的项目,所以我需要知道它们的位置。 我只有几个QGraphicsPixmapItem
对象,并且它们没有问题,因为pixmapItem.pos()
使我可以在场景坐标中确定每个项目的真实位置。 但是,使用QGraphicsLineItem
si可以为每行获得相同的坐标(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, 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()
。
另外,由于您说过要相对移动场景中的项目,因此我想提及以下事实。 如果为项目设置父项目,则其位置将相对于父项目进行计算。 您可能会发现它很有用。
虽然要求“ lineitem的行”有点奇怪,但我相信您想要:
QPointF current_pos = line-> line()。p1();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.