更改模型后重新调整 QTableView

readjust QTableView after changes to the model

我用的是PySide2==5.13.0

我有一个自定义的 QTableView。 QAction 调用下面的 remove 方法。一切正常,但 table 视图本身不会调整其尺寸(与 add 方法相同)。

def remove(self, row):
    print(f'remove {row}')
    self.model.removeRow(row)

    # I tried a few of the methods
    self.table_view.resizeColumnsToContents()
    self.table_view.restoreGeometry()
    self.table_view.adjustSize()  # resize...

屏幕截图显示模型已正确处理(行已消失)。但是 table 视图本身也需要删除该行。

我相信是……小,我正在研究文档几个小时,但找不到解决这个问题的方法(还)。想法?

我在文档 beginInsertRows 中找到了解决方案。现在完全有道理。我需要将 beginRemoveRows() 和 endRemoveRows() 调用添加到我模型中的 removeRow 实现。

这里是文档中的相关细节,以防您好奇:

为可调整大小的数据结构提供接口的模型可以提供 insertRows() 、 removeRows() 、 insertColumns() 和 removeColumns() 的实现。实现这些功能时,重要的是在模型尺寸发生前后通知任何连接的视图:

  • insertRows() 实现必须在将新行插入数据结构之前调用 beginInsertRows(),然后立即调用 endInsertRows()。

  • removeRows() 实现必须在从数据结构中删除行之前调用 beginRemoveRows(),然后立即调用 endRemoveRows()。

...