修复modbus变量没保存时直接删除后变量类型combobox出错问题

main
ZHANGXUXU\95193 1 month ago
parent 5409ce7e3c
commit 10619fea0c

@ -337,6 +337,7 @@ class ProjectButtonDelegate(QItemDelegate):
sender.setIcon(qtawesome.icon('fa.pencil', color='#4c8cf2'))
# checkbox.setEnabled(False)
sender.isEdit = True
if sender.index[0] in model.editableList:
model.editableList.remove(sender.index[0])
rowIndex = sender.index[0]
proMes = ProjectManage.getByName(name)

@ -254,6 +254,7 @@ class UserButtonDelegate(QItemDelegate):
QMessageBox.Yes)
return
sender.isEdit = True
if sender.index[0] in model.editableList:
model.editableList.remove(sender.index[0])
if sender.oldName:
UserManage.editUser(userName = sender.oldName, Nname=name, userPwd = passwd, description = des, projectAuthority = projectAuthority, protocolSetting = protocolSetting, userAuthority = userAuthority, trendAuthority = trendAuthority)

@ -153,6 +153,7 @@ class AnalogButtonDelegate(TcRtdButtonDelegate):
QMessageBox.Yes)
return
sender.isEdit = True
if source_row in model.editableList:
model.editableList.remove(source_row)
if sender.oldName:
if sender.oldName == name:

@ -149,6 +149,7 @@ class HartButtonDelegate(BaseButtonDelegate):
QMessageBox.Yes)
return
sender.isEdit = True
if source_row in model.editableList:
model.editableList.remove(source_row)
if sender.oldName:
HartVarManage.editVar(name = sender.oldName, Nname = name, des = des)

@ -192,6 +192,7 @@ class HartSimulateButtonDelegate(BaseButtonDelegate):
QMessageBox.Yes)
return
sender.isEdit = True
if source_row in model.editableList:
model.editableList.remove(source_row)
if sender.oldName:
HartSimulateVarManage.editVar(name = sender.oldName, Nname = name, des = des)

@ -76,11 +76,31 @@ class VarTableModel(QAbstractTableModel):
def insert_data(self, x, index):
self.datas.insert(index, x)
self.checkList = ['Unchecked'] * len(self.datas)
# 更新 editableList插入行会导致索引 >= index 的值后移 1
new_editable = []
for r in self.editableList:
if r >= index:
new_editable.append(r + 1)
else:
new_editable.append(r)
self.editableList = new_editable
self.table.proxy.invalidate()
def remove_row(self, row):
self.datas.pop(row)
self.checkList = ['UnChecked'] * len(self.datas)
# 规范 checkList 的值,保持与其它地方一致的 'Unchecked'
self.checkList = ['Unchecked'] * len(self.datas)
# 更新 editableList移除被删行并将大于该行的索引减一
new_editable = []
for r in self.editableList:
if r == row:
# 被删除行,从 editableList 中移除
continue
elif r > row:
new_editable.append(r - 1)
else:
new_editable.append(r)
self.editableList = new_editable
self.table.proxy.invalidate()
def rowCount(self, parent: QModelIndex = ...) -> int:
@ -414,13 +434,15 @@ class ModbusButtonDelegate(BaseButtonDelegate):
fucationCbRow = str('cb' + str(source_row) + str(5))
fucationIndex = self.parent().model.index(source_row, 5)
fucationDelegate = self.parent().itemDelegate(fucationIndex)
fucationCheckbox = getattr(fucationDelegate, fucationCbRow)
# getattr 可能返回 None使用默认值避免 AttributeError
fucationCheckbox = getattr(fucationDelegate, fucationCbRow, None)
if sender.isEdit:
sender.setIcon(qtawesome.icon('fa.save', color='#1fbb6f'))
sender.isEdit = False
sender.oldName = model.datas[source_row][3]
model.editableList.append(source_row)
if fucationCheckbox:
fucationCheckbox.setEnabled(True)
self.parent().viewport().update()
@ -508,8 +530,11 @@ class ModbusButtonDelegate(BaseButtonDelegate):
model.remove_row(source_row + 1)
sender.isEdit = True
if fucationCheckbox:
fucationCheckbox.setEnabled(False)
# varModelCheckbox.setEnabled(False)
# 有可能在删除/其他操作后该索引已不存在,先检查再移除
if source_row in model.editableList:
model.editableList.remove(source_row)
self.parent().viewport().update()

@ -283,6 +283,7 @@ class TcRtdButtonDelegate(BaseButtonDelegate):
QMessageBox.Yes)
return
sender.isEdit = True
if source_row in model.editableList:
model.editableList.remove(source_row)
if sender.oldName:
if sender.oldName == name:

Loading…
Cancel
Save