首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >QGraphicsScene没有立即执行removeItem()

QGraphicsScene没有立即执行removeItem()
EN

Stack Overflow用户
提问于 2022-06-13 01:16:15
回答 1查看 117关注 0票数 0

我在c++/Qt中有一个简单的节点图编辑器,它使用QGraphicsView/QGraphicsScene绘制图形,我遇到了一个奇怪的问题,在调用scene.removeItem(Item)之后,有时scene.removeItem会在场景中停留片刻。我正在删除项目后,把他们从现场,所以它是造成分段错误。当我注释删除时,我可以看到项目的一部分正在绘制(而不是整件事情),在它完全消失之前,在文字的第二步。

这是我的密码。这是一个插槽,当连接被移除时,它会被一个调用。

代码语言:javascript
运行
复制
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也没有帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-15 07:23:06

我已经解决了问题。Qt文档

代码语言:javascript
运行
复制
void QGraphicsItem::prepareGeometryChange()

声明在更改项的边界矩形之前需要调用此方法,以便图形场景更新其索引。不是我干的。因此,当我在调整连接以匹配节点端口的代码之前添加这一项时,问题就消失了。

编辑:而且,我已经意识到我没有从QMap中删除该项目。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72596946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档