【发布时间】:2013-03-15 17:39:26
【问题描述】:
我已经在qgraphicsscene 和QLineF 中绘制了一个网格,您可以将自定义qgraphicsitems 作为网格中的块添加到场景中。我希望能够以不同的间距和索引重新绘制网格(索引只是较粗的线)。
我的问题是我不知道如何删除这些线条。我可以从场景中删除所有内容,但这需要太多工作,因为我必须将所有自定义项目复制到一个数组中,然后将它们重新添加到场景中。我尝试将指针列表放入行中,但无法删除指针。我还考虑将这些行作为子项添加到 qgraphicsitem 并删除该项目,这将导致删除所有行,但您不能将父项设置为行。
如何从QGraphicsScene 中删除特定的行组件?
像这样:scene->removeItem(..pointer..); 我错误地将scene->addItem(..) 的结果捕获为对象,然后将其存储为&reference。当我将结果存储为指针时,我能够再次操作该项目。
【问题讨论】:
-
"...但我无法删除指针。"为什么?当您使用
QGraphicsScene::addLine(..)时,它会返回一个指向该行的指针,您在使用它吗? -
我创建了一个 QLineF 对象,然后创建了一个指向该对象的指针,然后将其推回向量。我想使用返回的指针会是一样的吗?后来我遍历向量时,我尝试像这样删除它:
QLineF* grab = linevector.at(i); delete grab; grab = NULL; -
我很困惑,你是如何让
QLineFs 进入现场的? -
通过场景的 addLine() 函数。但这甚至是一个可行的概念吗,如果我终止 LineF,场景会识别并删除它还是会崩溃?
-
如果我理解正确:两者都不是。
QGraphicsLineItem包含一个QLineF,因此当您使用QGraphicsScene::addLine(..)创建一个时,行数据只是复制到其中。但是,如果您删除QGraphicsLineItem,它将从场景中移除。
标签: qt drawing qgraphicsscene