我有一个窗体小部件(称它为main-widget),它具有一个使用QsqlRelationTableModel作为模型来显示一些记录的表格视图(称它为main-tableview)。我想打开另一个表单小部件(称为子小部件)来编辑主小部件中的tableview的一行。
在关闭子小部件时,我只想更新主小部件中主表视图中的显示数据。我不想将数据提交到数据库,因为我想在关闭主窗口小部件时可以还原所有更改。
大多数任务都按预期工作。现在,我的子小部件中有一个组合框可以选择数据。关闭子小部件时,我仅“提交” QDataWidgetMapper以更新主表视图中的数据。这适用于。但是,如果我在子窗口小部件中打开一个预先编辑的记录,则组合框中的值显示不正确。它只是显示的组合框模型的第一个值,而不是之前选择的值。
要在sub-widget-combobox中显示正确的值,我必须将数据“提交”到模型,但是现在我无法在关闭main-widget时还原main-tableview中的更改。
这是所用代码的简化摘录:
设置主表视图:
self.model = QSqlRelationalTableModel(parent=None,db=dbtools.ProjectDB.use_project_db(self))
self.model.setEditStrategy(QSqlTableModel.OnManualSubmit)
self.model.setTable("VoucherPos")
self.model.setFilter("VoucherKey='" + str(parent_id) + "'")
self.model.setRelation(11,QSqlRelation("Accounts", "AccountKey", "AccountText"))
self.model.select()
self.main_tableview.setModel(self.model)
self.button_open_sub_widget.clicked.connect(self.open_sub_widget)
打开子小部件:
def open_sub_widget(self):
index = self.main_tableview.selectionModel().currentIndex()
sub_dlg = SubWidget(self.model, index)
sub_dlg.exec()
子小部件类:
class SubWidget(QDialog):
def __init__(self, model, index):
super(SubWidget, self).__init__(parent)
self.setupUi(self)
self.model = model
self.relModel = self.model.relationModel(11)
self.combobox_Test1.setModel(self.relModel)
self.combobox_Test1.setModelColumn(2)
self.mapper = QDataWidgetMapper(self)
self.mapper.setSubmitPolicy(QDataWidgetMapper.ManualSubmit)
self.mapper.setModel(self.model)
self.mapper.setItemDelegate(QSqlRelationalDelegate(self))
self.mapper.addMapping(self.cbTest1, 11)
self.mapper.setCurrentModelIndex(index)
self.button_close_subwidget.clicked.connect(self.close_sub_widget)
def close_sub_widget(self):
self.mapper.submit()
在关闭主窗口小部件时,有人提示恢复在主表视图中的更改(在子窗口小部件中完成)。