如何从QAbstractItemView中删除小部件
How to remove widget from QAbstractItemView
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
的有效问题。
QAbstractItemView
是基于模型的视图的基础。这意味着您应该从模型中删除项目,而不是从视图中删除。然后,模型负责通过适当的信号通知视图。
您可能对QAbstractItemModel
方法感兴趣,例如removeRow
。如果您自己实现模型,则您要负责实现它们并自己提出信号。
如果您传递None
作为新的小部件,它将删除旧的小部件,而不放置任何东西,有效地删除旧的小部件:
foo.setIndexWidget(index, None)
注意:这类似于将None
传递为parent
,没有removeParent
,只有setParent
。
找到了一个适合我的解决方案。使用QAbstractItemModel::reset()似乎也删除了setIndexWidget()设置的小部件。
这对我来说不是很直观,因为我把小部件设置为QAbstractView
而不是ItemModel
。
更准确地说,API文档建议使用beginResetModel()
和endResetModel()
,而不是我遵循的reset()
。
相关文章:
- 如何删除部分类?
- 删除C++中向量中第一个最小的数字(并保持顺序)
- Qt(QVBoxLayout类)中的小部件何时删除?
- 删除最小堆中的第 i 个索引
- 如何从一个向量中删除最小元素并添加到另一个向量,而第一个变为空?
- 在QT中,接收到子小部件产生的信号后,如何从父小部件中删除子小部件?
- 如何结合findMin()和delete()来删除BST中的最小节点
- 删除/最小化GIT合并冲突
- 替代QDockWidget的小部件,而没有删除以前的窗口
- 删除前面元素并将新元素添加到最小堆 (std::p riority_queue)
- Qt表小部件,按钮删除行
- 如何正确删除是中央小部件的Qgraphicsview对象
- C++ 创建小部件数组
- Qt;Q删除和删除小部件.setParent(NULL)是必需的
- 是否符合C++以及如何从信号中删除小部件
- 在c++中的FLTK中在运行时添加/删除小部件
- 如何删除小部件
- 如何从QAbstractItemView中删除小部件
- 从QTableView中删除小部件
- Qt5从我的主窗口添加和删除小部件