我在c++/Qt中有一个简单的节点图编辑器,它使用QGraphicsView/QGraphicsScene绘制图形,我遇到了一个奇怪的问题,在调用scene.removeItem(Item)之后,有时scene.removeItem会在场景中停留片刻。我正在删除项目后,把他们从现场,所以它是造成分段错误。当我注释删除时,我可以看到项目的一部分正在绘制(而不是整件事情),在它完全消失之前,在文字的第二步。
这是我的密码。这是一个插槽,当连接被移除时,它会被一个调用。
void GraphScene::connectionRemoved(QUuid uuid)
{
//Connections and nodes are stored in QMaps to retrieve them by uuid
ConnectionGraphicsItem *connectionItem = connections.value(uuid);
if (connectionItem == nullptr) return;
removeItem(connectionItem); //Delayed
//delete connectionItem;
qDebug() << "con removed" << uuid;
}
在将项目从场景中删除之前,我尝试调用prepareGeometryChange(),但它没有修复它。将QGraphicsView更新模式设置为FullViewportUpdate也没有帮助。
发布于 2022-06-15 07:23:06
我已经解决了问题。Qt文档
void QGraphicsItem::prepareGeometryChange()
声明在更改项的边界矩形之前需要调用此方法,以便图形场景更新其索引。不是我干的。因此,当我在调整连接以匹配节点端口的代码之前添加这一项时,问题就消失了。
编辑:而且,我已经意识到我没有从QMap中删除该项目。
https://stackoverflow.com/questions/72596946
复制相似问题