spe*_*Teh 2 c++ qt qgraphicsscene
我在确定 的位置时遇到问题QGraphicsLineItem。我想相对地移动场景中的物品,所以我需要知道它们的位置。我的QGraphicsPixmapItem对象很少,我对它们没有问题,因为pixmapItem.pos()在场景坐标中给了我每个项目的真实位置。但是使用 QGraphicsLineItemsi 为每条线获得相同的坐标 (0,0)。这是代码:
QGraphicsLineItem*line = new QGraphicsLineItem();
scene->addItem(line);
line->setLine(QLineF(0,VVR-i*(OH),HVR,VVR-i*(OH)));
Run Code Online (Sandbox Code Playgroud)
此代码在正确的位置绘制线条,但其坐标设置为(0,0)not (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)));
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到 的真实(场景)坐标QGraphicsLineItem,因为我得到了QGraphicsPixmapItem谢谢!
每个图形项在 处都有初始位置(0, 0)。您可以使用 设置其新位置setPos。其所有内容将根据新位置进行移动。
但setLine不会改变项目位置。此方法更改项目代表的对象。例如,对象可以是(0, 5) - (5, 5)线。如果您没有设置项目位置,则位置保持在(0, 0),而行显示在(0, 5) - (5, 5)。如果您设置例如 position (2, 0),则该行将移动到(2, 5) - (7, 5)position 。有类似于setLine其他基本图形项类(例如QGraphicsPixmapItem::setOffset)的方法。
如果要获取之前由 设置的行位置setLine(),请使用line()方法。如果您使用 移动项目setPos(),请使用pos()。
另外,既然你说要相对移动场景中的物品,我想提一下以下事实。如果为一个项目设置了一个父项目,它的位置将相对于父项目进行计算。你可能会发现它很有用。
| 归档时间: |
|
| 查看次数: |
4281 次 |
| 最近记录: |