我对 QT 框架的某些部分有疑问。我正在使用 QT 5.0.2,目前正在 Windows 上开发。
在我的应用程序中,我有一个使用 QSqlRelationalTableModel 设置的 Tableview。在它旁边,我有一个文本字段和 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
" "
表示提交成功,没有报错。
然而,只有第一个字段在模型中得到更新。所有其他小部件将它们的值重置为原始模型的值(因为模型发出 datachanged,我猜是映射器连接到的)。
我尝试删除一个或两个映射,并且总是只有首先添加映射的字段才会更新。
如果我将 submitPolicy 更改为 autoSubmit,则映射器会按预期工作。但我真的需要那些重置和应用按钮,而不是在更改时提交数据。
这似乎是QTBug 1086的出现,但该错误已得到修复,我也无法从那里的代码中的错误报告中重现该问题。
我希望你能帮助我。