11-保存与取消修改
11.2.5 保存与取消修改
在打开数据表初始化时,设置数据模型的编辑策略为OnManualSubmit,即手动提交修改。当数据模型的数据被修改后,不管是直接修改字段值,还是插入或删除记录,在未提交修改前,QSqlTableModel::isDirty()函数返回true,就是利用这个函数在自定义槽函数on_currentChanged()里修改actSubmit和actRevert两个Action的使能状态。
actSubmit用于保存修改,actRevert用于取消修改,对应工具栏上的“保存”和“取消”两个按钮,下面是这两个Action的槽函数的代码。
void MainWindow::on_actSubmit_triggered()
{//保存修改
bool res=tabModel->submitAll();
if (!res)
QMessageBox::information(this, "消息", "数据保存错误,错误信息\n"
+tabModel->lastError().text(),QMessageBox::Ok,QMessageBox::NoButton);
else
{
ui->actSubmit->setEnabled(false);
ui->actRevert->setEnabled(false);
}
}
void MainWindow::on_actRevert_triggered()
{//取消修改
tabModel->revertAll();
ui->actSubmit->setEnabled(false);
ui->actRevert->setEnabled(false);
}
QSqlTableModel::submitAll()函数用于将数据表所有未提交的修改保存到数据库,revertAll()函数取消所有修改。
调用submitAll()函数保存数据时如果失败,可以通过lastError()函数获取错误的具体信息,例如,Name是必填字段,添加记录时若没有填写Name字段的内容就提交,就会出现错误信息提示对话框。