gpt4 book ai didi

c++ - QDataWidgetMapper 只更新第一个索引到 QSqlRelationalTableModel

转载 作者:搜寻专家 更新时间:2023-10-31 01:49:46 25 4
gpt4 key购买 nike

我对 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 
" "

表示提交成功,没有报错。

不过,只有第一个字段在模型中得到更新。所有其他小部件将它们的值重置为原始模型的值(我猜是因为模型发出数据更改,映射器将自身连接到它)。

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

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

这似乎是 QTBug 1086 的出现但是该错误已得到修复,我也无法从那里的代码的错误报告中重现该问题。

我希望你能帮助我。

最佳答案

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

关于c++ - QDataWidgetMapper 只更新第一个索引到 QSqlRelationalTableModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16084658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com