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()))
产生了预期的结果
如果保存操作未成功完成,我无法阻止用户表单更改当前 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()))
产生了预期的结果