我创建了一个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似乎不再认识到这一点。即使我点击之前拖过的现有矩形,我的控制也会循环出来。
答案 0 :(得分:2)
QGraphicsItem的变换在拖动后会发生变化,因此需要将该点转换为项目的本地坐标。
gi->contains(gi->mapFromScene(dragBeginPoint))
要在场景坐标中转换或获取项目的位置,请使用
gi->mapToScene(0,0) or gi->scenePos()