【问题标题】:Qt: QGraphicsLineItem position in QGraphicsSceneQt:QGraphicsLineItem 在 QGraphicsScene 中的位置
【发布时间】:2019-02-01 20:55:54
【问题描述】:

我在确定QGraphicsLineItem 的位置时遇到问题。我想相对移动场景中的物品,所以我需要知道它们的位置。我有几个QGraphicsPixmapItem 对象,我对它们没有任何问题,因为pixmapItem.pos() 为我提供了场景坐标中每个项目的真实位置。但是对于QGraphicsLineItems,我每行都得到相同的坐标(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 谢谢!

【问题讨论】:

  • 要获取线在场景中的位置,使用函数scenePos(),而不是pos(),它将返回对象在场景坐标中的位置。

标签: c++ qt qgraphicsscene


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    虽然问“lineitem的line”有点奇怪,但相信你想要的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-09
      • 1970-01-01
      相关资源
      最近更新 更多