我试图制作一个带有可移动控制点的情节usig QGraphicsView
,QGraphicsScene
&& QGraphicsItemGroup
。我遇到的问题是我无法找到删除/删除该项目的任何方法。
我的想法如下:
我将会有一个QGraphicsView,它将成为可移动的插值点,在它下面将绘制一个通过这些点的绘图。
为实现这一目标,我考虑使用两个(或更多)QGraphicsItemGroups
。
- 一个用于插值点,由于我需要拖动它们而无法删除
- 一个显示在他们下面的实际情节
为此,我将把行添加到第一组并显示它们。但是会有很多重绘,我现在不知道的是如何从QGraphicsView
/ QGraphicsScene
/ QGraphicsItemGroup
正确删除项目,以便赢得&# 39;不再显示了。请记住,我需要删除/替换一组项目而不删除所有其他项目。
我正在阅读文档和教程,但找不到任何有用的内容。
答案 0 :(得分:4)
您需要先了解图形视图/场景系统。 例如,您声明以下内容: -
“我将有一个QGraphicsView,它就是......”
这没有意义。 QGraphicsView就像一个进入世界的窗口(QGraphicsScene)。因此,您将把项目放入场景中,这些项目来自QGraphicsItem或QGraphicsObject。这些是通过QGraphicsView查看的。
添加项目很简单,您只需调用QGraphicsScene函数addItem即可获取QGraphicsItem *。
在这种情况下,您有一个指向该项目的指针,因此如果您调用QGraphicsScene::removeItem,它将从场景中删除它,然后您可以删除该项目。如果删除是在插槽函数内发生的,我建议使用deleteLater调用,而不是直接删除指针。
您的问题提及QGraphicsItemGroups。如上所述,功能QGraphicsScene::createItemGroup和QGraphicsScene::destroyItemGroup。
正如destroyItemGroup的文档所述: -
将组中的所有项目重新分组到组的父项目,然后从场景中删除组,最后将其删除
因此,在这种情况下,调用destroyItemGroup只会破坏该组。因此,在调用destroyItemGroup之前,需要首先删除和删除项目。
请注意,如果您只是删除场景中的某个项目,它将自动删除。
最后,请注意Qt GraphicItems使用Qt的父层次结构,因此您可以简单地使用父对象,而不是使用项目组。