您需要从了解图形视图/场景系统开始。
例如,您声明以下内容:-
“我将有一个 QGraphicsView,上面有......”
这没有道理。 QGraphicsView 就像进入世界的窗口(QGraphicsScene)。因此,您将把从 QGraphicsItem 或 QGraphicsObject 派生的项目放入场景中。这些是通过 QGraphicsView 查看的。
添加项目很简单,只需调用 QGraphicsScene 函数即可addItem http://qt-project.org/doc/qt-4.8/qgraphicsscene.html#addItem,它需要一个 QGraphicsItem*。
在这种情况下,您有一个指向该项目的指针,因此如果您调用QGraphicsScene::removeItem http://qt-project.org/doc/qt-4.8/qgraphicsscene.html#removeItem,它会将其从场景中删除,然后您可以删除该项目。如果删除发生在槽函数内部,我建议使用对deleteLater的调用,而不是直接删除指针。
您的问题提到了QGraphicsItemGroups。如上,有以下功能QGraphicsScene::createItemGroup http://qt-project.org/doc/qt-4.8/qgraphicsscene.html#createItemGroup and QGraphicsScene::destroyItemGroup http://qt-project.org/doc/qt-4.8/qgraphicsscene.html#destroyItemGroup.
正如 destroyItemGroup 的文档所述:-
将组中的所有项目重新设置为组的父项目,然后从场景中删除组,最后将其删除
因此,在这种情况下,调用 destroyItemGroup 只会销毁该组。因此,在调用 destroyItemGroup 之前,您需要先移除并删除项目。
请注意,如果您只是删除场景中的某个项目,它将自动删除。
最后,请注意 Qt GraphicItems 使用 Qt 的父层次结构,因此您可以简单地设置父对象,而不是使用项目组。