正确删除项目从QGraphicsScene/QgraphicsItemGroup/QGraphicsView



我正在尝试使用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的父层次结构,因此您可以简单地父对象,而不是使用项组。

相关内容

  • 没有找到相关文章

最新更新