问题现象:
当前项目使用QTableWidget控件供用户填写信息。
当用户修改单元格内容后,在不点击其他单元格或不按下键盘“Enter”的条件下直接关闭窗体,修改的数据不会写入内存中。(在该窗体的closeeEvent方法中读取对应单元格的文本,文本仍是修改前的数据)
解决方式:
使用QTableWidget的cellChanged信号与cellDoubleClicked信号。
当单元格被双击时cellDoubleClicked信号发射,修改changeFlag标志位为真代表用户开始修改;当单元格内容修改完成(用户点击了其他的单元格或按下了键盘“Enter”),修改changeFlag标志位为假代表用户修改完成。
此时在closeEvent方法中判断changeFlag标志位,如果为真即用户开始修改完为修改完成,使用setCurrentItem方法模拟用户点击了其他单元格动作,使被修改的数据同步到内存中。
def TableInit(self):
self.tableWidget = QTableWidget()
self.tableWidget.cellChanged.connect(self.CellChanged)
#修改完成后发射此信号
self.tableWidget.cellDoubleClicked.connect(self.CellDoubleClicked)
#双击单元格即开始修改单元格是发射此信号
def CellChanged(self):
self.changeFlag=False
#修改完成
def CellDoubleClicked(self):
self.changeFlag=True
#开始修改
def closeEvent(self, event):
if self.changeFlag:
#正在修改中
self.tableWidget.setCurrentItem(self.tableWidget.item(0,0))
#通过设置表格当前选择选择位置,模拟用户按下键盘“Enter”按键或点击了其他单元格