我正在尝试使用QGraphicsView
, QGraphicsScene
制作一个带有可移动控制点的plot &&QGraphicsItemGroup
。我遇到的问题是我找不到任何移除/删除项目的方法。
我的想法如下:
我将有一个QGraphicsView,在它上面将是可移动的插值点在它下面将绘制经过这些点的绘图
为了实现这一点,我正在考虑使用两个(或更多)QGraphicsItemGroups
。-一个插值点,它不能被删除,因为我需要拖动它们-一个用于显示在它们下面的实际绘图
要做到这一点,我要把Lines添加到第一组并显示它们。但是会有很多重画,我现在不知道的是如何正确地从QGraphicsView
/QGraphicsScene
/QGraphicsItemGroup
中删除项目,这样它就不会再显示了。请记住,我只需要删除/替换一组项目,而不需要删除所有其他项目。
我正在浏览文档和教程,但没有找到任何有用的
你需要从理解图形视图/场景系统开始。例如,您声明如下:-
"我将有一个QGraphicsView,在它上面是…"
这没有意义。一个QGraphicsView就像一个进入世界的窗口(QGraphicsScene)。因此,您将在场景中放置从QGraphicsItem或QGraphicsObject派生的项目。这些都是通过QGraphicsView查看的。
添加一个项目很简单,你可以调用QGraphicsScene函数addItem,它接受一个QGraphicsItem*。
在这种情况下,你有一个指向项目的指针,所以如果你调用QGraphicsScene::removeItem,它将从场景中删除它,然后你可以删除项目。如果要在槽函数内部进行删除操作,我建议使用deleteLater调用,而不是直接删除指针。
你的问题提到sqgraphicsitemgroups。如上所述,有函数QGraphicsScene::createItemGroup和QGraphicsScene::destroyItemGroup。
如destroyItemGroup的文档所述:-
将group中的所有项重置为group的父项,然后从场景中删除group,最后将其删除
因此,在这种情况下,调用destroyItemGroup只会销毁组。因此,在调用destroyItemGroup之前,您需要先移除和删除这些项。
请注意,如果您只是在场景中删除一个项目,它将被自动删除。
最后,请注意Qt GraphicItems使用Qt的父层次结构,因此您可以简单地父对象,而不是使用项组。