在qcombobox中显示编辑的数据

时间:2018-09-06 08:44:13

标签: qt pyqt

我有一个窗体小部件(称它为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()

在关闭主窗口小部件时,有人提示恢复在主表视图中的更改(在子窗口小部件中完成)。

0 个答案:

没有答案