gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:52:14 24 4
gpt4 key购买 nike

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

我的想法如下:

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

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

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

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

最佳答案

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

"I'm going to have a QGraphicsView, on it are..."

这没有意义。 QGraphicsView 就像一个进入世界的窗口(QGraphicsScene)。因此,您将把派生自 QGraphicsItem 或 QGraphicsObject 的项目放入场景中。这些是通过 QGraphicsView 查看的。

添加一个item很简单,调用QGraphicsScene函数即可addItem ,它需要一个 QGraphicsItem*。

在这种情况下,您有一个指向该项目的指针,因此如果您调用 QGraphicsScene::removeItem ,它会将它从场景中移除,然后您可以删除该项目。如果删除发生在槽函数内部,我建议使用对 deleteLater 的调用,而不是直接删除指针。

您的问题提到了 QGraphicsItemGroups。如上,有函数QGraphicsScene::createItemGroupQGraphicsScene::destroyItemGroup .

正如 destroyItemGroup 的文档所述:-

Reparents all items in group to group's parent item, then removes group from the scene, and finally deletes it

因此,在这种情况下,调用 destroyItemGroup 只会销毁该组。因此,在调用 destroyItemGroup 之前,您需要先移除和删除项目。

请注意,如果您只是简单地删除场景中的某个项目,它会自动删除。

最后,请注意 Qt GraphicItems 使用 Qt 的父级层次结构,因此您可以简单地将对象作为父对象,而不是使用项目组。

关于c++ - 从 QGraphicsScene/QgraphicsItemGroup/QGraphicsView 中正确删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24910240/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com