问题描述
我已经将 QsqlTableModel 子类化来控制表视图中的不同显示内容(例如负值的红色、十进制数字的动态数量等)并且工作正常。
当我尝试删除一行时,该方法不起作用,而不是删除底层数据库中的行。`
class CustomsqlTableModel(QsqlTableModel):
def __init__(self,table,*args,**kwargs):
super(CustomsqlTableModel,self).__init__(*args,**kwargs)
self.setTable(table)
self.setEditStrategy(QsqlTableModel.OnManualSubmit) #OnFieldChange
self.select()
def data(self,index,role ):
# here several ifs to control display they work fine in TableView
# even if I delete them and just leave out the bellow standard line it will not remove the row
return QsqlTableModel.data(self,role)
def setData(self,value,role = Qt.EditRole):
if not index.isValid():
return False
return QsqlTableModel.setData(self,role)
model = CustomsqlTableModel(db = my_conn,table = 'my_table')
print(model.rowCount()) # returns the number of rows
a = model.removeRow(2)
print(a) # returns True
b = model.submitAll()
print(b) # returns True
c = model.select()
print(c) # returns True
print(model.rowCount()) # returns the same number of rows
如果我删除 QsqlTableModel 的 Data 和/或 setData 重新实现,RemoveRow 会起作用并从数据库中删除该行。
但是如果在 Data() 方法中我只保留复制 Base 类方法的标准行,RemoveRow 也将不起作用。所以在子类化中我做错了一定是非常基本的东西。
我在其他回复中看到暗示应该在 Data() 方法重新实现中考虑 EditRole 和/或 Record() 方法,但我无法弄清楚。谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)