为什么在这句代码中,我的self.model.submitAll()不起作用?self.pushButton_14.clicked.connect(lambda: self.model.insertRows(self.model.rowCount(), 1),self.model.submitAll())
时间: 2023-05-24 22:01:30 浏览: 76
您需要将self.model.submitAll()移动到self.pushButton_14.clicked的lambda函数内部,并将其放在self.model.insertRows()函数后面的逗号后面。修改后的代码应该是这样的:
self.pushButton_14.clicked.connect(lambda: (self.model.insertRows(self.model.rowCount(), 1), self.model.submitAll()))
相关问题
self.model.setEditStrategy(QSqlTableModel.OnFieldChange)
`setEditStrategy(QSqlTableModel.OnFieldChange)` 是将模型的编辑策略设置为在字段更改时立即提交。
当编辑一个字段时,该字段的更改将立即提交到数据库,而不需要手动调用 `submitAll()` 或 `submit()` 方法来提交更改。
这种编辑策略适用于需要实时更新数据库的场景,例如在用户修改字段后立即保存更改。
如果你希望模型的编辑策略为在提交之前缓存更改,可以使用 `setEditStrategy(QSqlTableModel.OnManualSubmit)`。这样,你需要手动调用 `submitAll()` 或 `submit()` 方法来提交更改。
根据你的需求和业务逻辑,选择适合的编辑策略。
在qt中,使用qsqltablemodel新增一行,调用submitAll, 未填写的字段报错怎么办
如果使用 QSqlTableModel 新增一行时,未填写的字段会报错,可以在提交之前检查所有的字段是否都有值,如果有未填写的字段,可以手动设置默认值或者提示用户填写完整。
例如,可以使用如下代码来检查未填写的字段并设置默认值:
```cpp
QSqlRecord record = model->record(); //获取表格的记录
for(int i=0; i<record.count(); i++){
if(record.value(i).isNull()){ //如果该字段为空
if(record.field(i).type() == QVariant::String){ //如果为空的是字符串类型
record.setValue(i, "Default Value"); //设置默认值
}
else if(record.field(i).type() == QVariant::Int){ //如果为空的是整数类型
record.setValue(i, 0); //设置默认值
}
//其他类型的默认值设置可以根据需要进行修改
}
}
model->insertRecord(-1, record); //插入新的记录
model->submitAll(); //提交修改
```
当然,也可以在界面上添加必填项提示,以确保用户在新增记录时填写完整。