繁体   English   中英

Qt:QGraphicsScene中的QGraphicsLineItem位置

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM