У меня есть виджет формы (назовите его main-widget) с табличным представлением (назовите его main-tableview), использующий QsqlRelationTableModel в качестве модели для отображения некоторых записей.Я хочу открыть другой виджет формы (назовите его вспомогательным виджетом), чтобы отредактировать одну строку табличного представления в основном виджете.
При закрытии вспомогательного виджета я хочу обновить только отображаемые данныев главном табличном представлении в главном виджете.Я не хочу отправлять данные в базу данных, потому что я хочу иметь возможность отменить все изменения при закрытии основного виджета.
Большая часть задачи работает как хотелось бы.Теперь в моем подвиджете есть поле со списком для выбора данных.Закрывая свой подвиджет, я только «отправляю» QDataWidgetMapper, чтобы обновить данные в основном виде таблицы.Это работает, чтобы.Но если я открою ранее отредактированную запись в подвиджете, значение в выпадающем списке отображается некорректно.Это только первое значение показанной модели комбинированного списка, а не значение, выбранное до этого.
Чтобы отобразить правильное значение в вспомогательном виджете-комбинированном списке, я должен «передать» данные в модель, нотеперь я не могу отменить изменения в представлении основной таблицы при закрытии виджета main.
Вот упрощенная выдержка из использованного кода:
Установка представления основной таблицы:
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()
У кого-нибудь есть подсказка, чтобы отменить изменения в представлении основной таблицы (сделаново вспомогательном виджете) при закрытии основного виджета.