QAbstractItemView有`setIndexWidget但没有"remove“功能。
当我想要从视图中删除它们时,我试图通过存储传递给QAbstractItemView和hide / delete它们的小部件来解决这个问题,这最终导致了RuntimeError: wrapped C/C++ object of %S has been deleted错误。我假设这是因为小部件的所有权被传递给了viewport,正如文档所说:
Sets the given widget on the item at the given index, passing the ownership of the widget to the viewport.如何删除小部件?
我使用的是PyQt,但我假设这对C++和PySide也是有效的问题。
发布于 2013-02-28 17:43:39
我找到了一个适合我的变通办法。使用QAbstractItemModel::reset()似乎也会删除由setIndexWidget()设置的小部件。
这对我来说不是很直观,因为我将窗口小部件设置为QAbstractView,而不是ItemModel。
更准确地说,API doc建议使用beginResetModel()和endResetModel(),而不是我遵循的reset()。
发布于 2013-02-28 17:52:21
QAbstractItemView是基于模型的视图的基础。这意味着您应该从模型中删除项目,而不是从视图中删除。然后,模型负责通过适当的信号通知视图。
您可能对removeRow等QAbstractItemModel方法感兴趣。如果你自己实现这个模型,你就得自己负责实现它们并发出信号。
发布于 2013-02-28 18:00:49
如果您将None作为新的小部件传递,它将删除旧的小部件,而不放置任何内容,从而有效地删除旧的小部件:
foo.setIndexWidget(index, None)注意:这类似于将None作为parent传递,没有removeParent,只有setParent。
https://stackoverflow.com/questions/15128282
复制相似问题