QAbstractTableModel和QSortFilterProxyModel -如何清除数据和更新视图



给定一个QSortFilterProxyModel和一个QAbstractTableModel,代理设置为表模型,而该代理在QTableView中使用,我将如何

  • 清除实际数据
  • 更新视图以显示数据
  • 中的变化

伪代码:

class MyTableModel(QAbstractTabelModel):
def __init__(self, parent=None):
QAbstractTabelModel.__init__(self, parent)

self.entries = [ <data entries here> ]
@Slot()
def slot_clear_entries(self):
self.entries.clear()
# Trigger refresh of model and notify all connected views
pass
# data(), headerData() etc.
# ...
class MyProxyModel(QSortFilterProxyModel):
def __init__(self, parent=None):
QSortFilterProxyModel.__init__(self, parent)

class MyTableView(QTableView):
def __init__(self, parent=None)
QTableView.__init__(self, parent)

self.model = MyTableModel()
self.proxy = MyProxyModel()
self.proxy.setSourceModel(self.model)
self.setModel(self.proxy)

我在上面使用PySide,但PyQt或纯Qt c++解决方案没有问题。我可以替换模型,但我也在考虑模型也与文件或数据库交互的情况,所以我想处理清理可能涉及额外步骤的场景。

这里有一个很好的例子。基于此,我能够覆盖MyTableModel内部的以下内容,并添加一个触发删除所有条目的插槽:

def removeRows(self, row, count, parent=QModelIndex(), *args, **kwargs):
self.beginRemoveRows(parent, row, row+count-1)
print(row, count)
del self.entries[row:row+count]
self.endRemoveRows()
return True
@Slot()
def slot_clear_entries(self):
self.removeRows(0, len(self.entries))

最新更新