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

2024-03-04

我正在尝试使用可移动控制点绘制一个图QGraphicsView, QGraphicsScene&&QGraphicsItemGroup。我遇到的问题是我找不到任何删除/删除该项目的方法。

我的想法如下:

我将有一个 QGraphicsView,在它上面将是可移动的插值点,在它下面将绘制穿过这些点的图。

为了实现这一目标,我正在考虑使用两个(或更多)QGraphicsItemGroups。 - 一个用于插值点,无法删除,因为我需要拖动它们 - 其下显示的实际情节的一个

为此,我将把线条添加到第一组中并显示它们。但是将会有很多重画,我现在不知道的是如何正确地从QGraphicsView/QGraphicsScene/QGraphicsItemGroup所以它不会再显示了。请记住,我只需要删除/替换一组项目,而不删除所有其他项目。

我正在浏览文档和教程,但找不到任何有用的东西。


您需要从了解图形视图/场景系统开始。 例如,您声明以下内容:-

“我将有一个 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 的父层次结构,因此您可以简单地设置父对象,而不是使用项目组。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正确从 QGraphicsScene/QgraphicsItemGroup/QGraphicsView 中删除项目 的相关文章

随机推荐