QSqlTabelMode提供了一个可以修改的模型,并且不需要SQL语句就可以实现数据的增删改查
我通过一个小例子来演示各种操作:
首先在建好项目的ui界面加入以下QPushButton,QLineEdit,QLabel,QTableview并布局:
然后一个一个来说,我原来的文章中有一篇关于数据库连接的文章。
不会连接数据库的小伙伴可以点击这里:数据库连接
随后我们先把模型加入tableview
model = new QSqlTableModel(this);
model -> setTable("students");
model -> select();
model -> setEditStrategy(QSqlTableModel::OnManualSubmit);
ui->tableView->setModel(model);
此处我们先建立了QSqlTableModel,使用setTabel为其指定表格,随后查询,此处的 QSqlTableModel::EditStrategy是一个枚举类型,
常量 | 描述 |
---|---|
QSqlTableModel::OnFieldChange | 对所有模型的改变会瞬间应用到数据库 |
QSqlTableModel::OnRowChange | 对于一条记录的改变在用户选择另一条记录时被应用 |
QSqlTableModel::OnManualSubmit | 所有改变会在模型中缓存只到调用submitAll()和severAll() |
下面每一个功能我都把他的槽函数拿过来大家自行看一下就可以:
添加:
//添加
int rownum = model->rowCount();//获取行数
int id =10;
model->insertRow(rownum);
model->setData(model->index(rownum,0),id);
model->submitAll();
删除:
//删除
int currow = ui->tableView->currentIndex().row();//确定行数
model->removeRow(currow);
int issure = QMessageBox::warning(this,tr("删除提醒"),
tr("确认要删除当前行吗?"),
QMessageBox::Yes,QMessageBox::No);
if(issure==QMessageBox::No){
model->revertAll();
}
else{
model->submitAll();
}
修改提交:
//修改提交
model->database().transaction();
if(model->submitAll()){
if(model->database().commit()){
QMessageBox::information(this,"提交提醒","修改成功");
}
}
else{
model->database().rollback();
QMessageBox::information(this,"提交提醒",tr("提交错误1%")
.arg(model->lastError().text()),QMessageBox::Yes);
}
修改撤回:
//修改撤回
model->revertAll();
排序:
//升序排序
model->setSort(0,Qt::AscendingOrder);
model->select();
//降序排序
model->setSort(0,Qt::DescendingOrder);
model->select();
查询:
//查询
QString name = ui->lineEdit->text();
model->setFilter(QString("name = '%1'").arg(name));
model->select();
显示全表:
model->setTable("students");
model->select();