У меня проблема с частями фреймворка QT. Я использую QT 5.0.2 и в настоящее время разрабатываю для Windows.
В моем приложении у меня есть Tableview, настроенный с помощью QSqlRelationalTableModel. Рядом с ним у меня есть текстовое поле и 3 поля со списком, связанные с моделью реляционной таблицы. Виджеты сопоставляются с моделью с помощью QDataWidgetMapper следующим образом:
mapper = new QDataWidgetMapper(this);
mapper->setModel(model);
mapper->setItemDelegate(new QSqlRelationalDelegate(this));
mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
mapper->addMapping(ui->courseComboBox, model->fieldIndex("course_shortcode"));
mapper->addMapping(ui->subjectComboBox, model->fieldIndex("subject_name"));
mapper->addMapping(ui->lecturerComboBox, model->fieldIndex("lecturer_name"));
mapper->addMapping(ui->themesTextEdit, model->fieldIndex("event_themes"));
Как вы видите, SubmitPolicy настроен на ручную отправку. Под виджетами у меня есть кнопка, содержащая кнопку сохранения и сброса.
Когда нажимается кнопка сохранения, я делаю это:
qDebug() << this->mapper->submit();
qDebug() << model->lastError().text();
Это создаст следующий вывод:
true
" "
Это означает, что отправка прошла успешно и об ошибке не сообщалось.
Тем не менее, в модели обновляется только первое поле. Все остальные виджеты сбрасывают свое значение на значение из исходной модели (потому что модель испускает измененные данные, к которым, я думаю, подключился картограф).
Я попытался удалить одно или два сопоставления, и всегда будет обновляться только поле, сопоставление которого добавляется первым.
Если я изменю submitPolicy на autoSubmit, картограф выполнит свою работу, как и предполагалось. Но мне действительно нужно иметь эти кнопки сброса и применения, а не отправлять данные при изменении.
Это похоже на появление QTBug 1086, но эта ошибка была исправлена, и я не могу ее воспроизвести проблема из сообщения об ошибке из кода там же.
Я надеюсь, что вы можете мне помочь.