Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QDataWidgetMapper只更新QSqlRelationalTableModel的第一个索引_C++_Qt_Submit_Qtableview_Qsqltablemodel - Fatal编程技术网

C++ QDataWidgetMapper只更新QSqlRelationalTableModel的第一个索引

C++ QDataWidgetMapper只更新QSqlRelationalTableModel的第一个索引,c++,qt,submit,qtableview,qsqltablemodel,C++,Qt,Submit,Qtableview,Qsqltablemodel,我对QT框架的某些部分有问题。我正在使用Qt5.0.2,目前正在Windows上开发 在我的应用程序中,我使用QSqlRelationalTableModel设置了一个Tableview。在它旁边,我有一个文本字段和3个连接到关系表模型的组合框。小部件使用QDataWidgetMapper映射到模型,如下所示: mapper = new QDataWidgetMapper(this); mapper->setModel(model); mapper->setItemDelegate(

我对QT框架的某些部分有问题。我正在使用Qt5.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设置为manual submit。在这些小部件下,我有一个包含保存和重置按钮的按钮盒

单击“保存”按钮时,我会执行以下操作:

qDebug() << this->mapper->submit();
qDebug() << model->lastError().text();
这意味着提交成功,并且没有报告错误

然而,只有第一个字段在模型中得到更新。所有其他小部件都将其值重置为原始模型中的值(因为模型会发出datachanged,我猜映射程序会将其自身连接到datachanged)

我尝试删除一个或两个映射,并且始终只更新首先添加映射的字段

如果我将submitPolicy更改为autoSubmit,映射器将按预期工作。但我真的需要有那些重置和应用按钮,而不是在更改时提交数据

这看起来像是一个错误的发生,但是这个错误被修复了,我也不能从那里的代码中重现错误报告中的问题


我希望您能帮助我。

我编辑了我的答案,因为我误解了文档,在得到了很好的解释后,我终于找到了获得所需结果的正确方法。 您只需使用QSqlTableModel::setEditStrategy()修改模型编辑策略,并将其更改为QSqlTableModel::OnRowChange。 这是必要的,以避免在每一列修改后发送到底层数据库的修改,这会在第一列更改后更新映射的小部件内容

true 
" "