QTableView:防止用户离开特定行

QTableView: Prevent a user from navigating away from a spesific row

如果保存操作未成功完成,我无法阻止用户表单更改当前 selection。我可以使用 QTableView 的 selection 模型的 currentRowChanged 信号重新 select 一行,但是尽管 selection 改变了,蓝色的 selection 指示器却没有。见下图。

示例:在下图中,用户尝试添加一个新行 nr 537。但是保存操作出现错误,我不希望用户在保存之前离开第 537 行记录被删除或编辑然后保存

问:如何将蓝线移动到当前select离子? (当前selection是最后一行)(QTableView的Selection Behavior设置为select行)

这是我目前得到的代码:

    def __init__(self, parent):
        ...
        self.__tableViewSelectionModel = self.__ui.tableView.selectionModel()
        self.__tableViewSelectionModel.currentRowChanged.connect(self.rowChanged)

    def rowChanged(self, current=None, previous=None):
        if save() == True:
            self.__ui.tableView.clearSelection()
            self.__ui.tableView.selectRow(previous.row())

替换这个:

self.__ui.tableView.clearSelection()
self.__ui.tableView.selectRow(previous.row())

有了这个:

QtCore.QTimer.singleShot(0.00001, lambda: self.__ui.tableView.selectRow(previous.row()))

产生了预期的结果