QDataWidgetMapper只更新第一个索引到QSqlRelationalTableModel
QDataWidgetMapper only updates first index to QSqlRelationalTableModel
我有一个关于QT框架部分的问题。我正在使用QT 5.0.2,目前正在Windows上开发。
在我的应用程序中,我有一个与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的一个发生,但是这个bug已经修复了,我也不能从bug报告中从那里的代码重现问题。
我希望你能帮助我。
我编辑了我的答案,因为我误解了文档,在得到一个很好的解释后,我终于得到了获得所需结果的正确方法。您应该简单地使用QSqlTableModel::setEditStrategy()修改模型编辑策略,并将其更改为QSqlTableModel::OnRowChange。这是为了避免在每次修改单个列后将修改发送到底层DB,这将在第一个列更改后生成映射小部件内容的更新。
相关文章:
- 没有找到相关文章