拖动的QGraphicsItem在items()函数中不可见

时间:2015-07-06 10:47:57

标签: qt qt5 qgraphicsview qgraphicsitem qgraphicsscene

我创建了一个QGraphicsScene场景,并在场景中添加了一些graphcis项目(线条,矩形等)。

我可以使用此列表遍历它们:

 QList<QGraphicsItem*> all = items();

我启用了这些项目的移动,我可以通过单击选择它们来拖动它们。但是,在拖动某个元素后,它会停止显示在items()的{​​{1}}函数调用中。

QGraphicsScene

以上列表中没有显示任何拖动的项目,而未拖动的项目会显示。

拖动QGraphicScene元素是否会更改其父级?还是有人可以建议这样的问题?

{P.S。代码太大了,无法分享}

编辑1:

我正在使用标记QList<QGraphicsItem*> all = items(); QGraphicsItem::ItemIsSelectable来使项目移动。

QGraphicsItem::ItemIsMovable

默认情况下,我在场景中添加了几个矩形。然后在'移动模式'中我拖动它们。然后在“添加模式”中,我点击屏幕添加新的矩形。我写了一个逻辑来检查我是否点击任何现有的绘制矩形:

foreach(QGraphicsItem* itemInVisualScene, items())
{
        itemInVisualScene->setFlag(QGraphicsItem::ItemIsSelectable, itemsMovable);
        itemInVisualScene->setFlag(QGraphicsItem::ItemIsMovable, itemsMovable);
}

这种矩形的添加对于未在“移动模式”中拖动的rects工作正常。但是被移动的rects似乎不再认识到这一点。即使我点击之前拖过的现有矩形,我的控制也会循环出来。

1 个答案:

答案 0 :(得分:2)

QGraphicsItem的变换在拖动后会发生变化,因此需要将该点转换为项目的本地坐标。

gi->contains(gi->mapFromScene(dragBeginPoint))

要在场景坐标中转换或获取项目的位置,请使用

gi->mapToScene(0,0) or gi->scenePos()