Показать отредактированные данные в qcombobox - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть виджет формы (назовите его 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()

У кого-нибудь есть подсказка, чтобы отменить изменения в представлении основной таблицы (сделаново вспомогательном виджете) при закрытии основного виджета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...