首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从QAbstractItemView中删除小部件

如何从QAbstractItemView中删除小部件
EN

Stack Overflow用户
提问于 2013-02-28 13:40:20
回答 3查看 882关注 0票数 3

QAbstractItemView有`setIndexWidget但没有"remove“功能。

当我想要从视图中删除它们时,我试图通过存储传递给QAbstractItemViewhide / delete它们的小部件来解决这个问题,这最终导致了RuntimeError: wrapped C/C++ object of %S has been deleted错误。我假设这是因为小部件的所有权被传递给了viewport,正如文档所说:

代码语言:javascript
复制
Sets the given widget on the item at the given index, passing the ownership of the widget to the viewport.

如何删除小部件?

我使用的是PyQt,但我假设这对C++PySide也是有效的问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-28 17:43:39

我找到了一个适合我的变通办法。使用QAbstractItemModel::reset()似乎也会删除由setIndexWidget()设置的小部件。

这对我来说不是很直观,因为我将窗口小部件设置为QAbstractView,而不是ItemModel

更准确地说,API doc建议使用beginResetModel()endResetModel(),而不是我遵循的reset()

票数 0
EN

Stack Overflow用户

发布于 2013-02-28 17:52:21

QAbstractItemView基于模型的视图的基础。这意味着您应该从模型中删除项目,而不是从视图中删除。然后,模型负责通过适当的信号通知视图。

您可能对removeRowQAbstractItemModel方法感兴趣。如果你自己实现这个模型,你就得自己负责实现它们并发出信号。

票数 1
EN

Stack Overflow用户

发布于 2013-02-28 18:00:49

如果您将None作为新的小部件传递,它将删除旧的小部件,而不放置任何内容,从而有效地删除旧的小部件:

代码语言:javascript
复制
foo.setIndexWidget(index, None)

注意:这类似于将None作为parent传递,没有removeParent,只有setParent

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

https://stackoverflow.com/questions/15128282

复制
相关文章

相似问题

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