使用model 可以基本避免写sql语句环节,加快了编写速度,view为我们在界面看到的内容,model其实是为数据
如下为编写使用model进行增删改查
首先创建一个名为“info”的数据库文件置于当前qt文件的build目录下,其内容如图
ui 界面设计如下
其中,增加键可以增加一空行,删除可以删除选中的数据,但是每次操作后必须点击确定或者取消,修改数据可以直接双击数据进行修改操作;
以下为源代码
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QSqlTableModel>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_buttonDel_clicked();
void on_buttonSure_clicked();
void on_buttonCancel_clicked();
void on_buttonAdd_clicked();
void on_pushButton_5_clicked();
private:
Ui::Widget *ui;
QSqlTableModel *model;
};
#endif // WIDGET_H
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
#include "widget.h"
#include "ui_widget.h"
#include<QSqlDatabase>
#include<QDebug>
#include<QMessageBox>
#include<QSqlError>
#include<QSqlQuery>
#include<QVariantList>
#include<QString>
#include<QSqlRecord>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QSqlDatabase a = QSqlDatabase::addDatabase("QSQLITE"); //创建数据库
a.setDatabaseName("info"); //绑定数据库名称
if(!a.open())
{
QMessageBox::warning(this,"错误",a.lastError().text(),
QMessageBox::Ok);
return;
}
model = new QSqlTableModel(this);
model->setTable("student"); //指定使用哪一个表
ui->tableView->setModel(model); //每个view对应一个model
model->setHeaderData(0,Qt::Horizontal,"学号"); //第0列设置别名
model->select(); //显示所有的列
model->setEditStrategy(QSqlTableModel::OnManualSubmit);//设置手动提交后才可以修改
//ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
// 设置view不可修改
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_buttonDel_clicked() //再最后一行添加空记录
{
QSqlRecord record = model->record();//获取空记录行
int row = model->rowCount(); //获取当前的行号
model->insertRecord(row,record); // 插入行
}
void Widget::on_buttonSure_clicked()
{
model->submitAll();//设置手动提交后,该键点击后会提交在view中的修改内容
}
void Widget::on_buttonCancel_clicked()
{
model->revertAll();//取消所有的动作
model->submitAll();//提交动作
}
void Widget::on_buttonAdd_clicked()
{
//获取圈选的模型
QItemSelectionModel *sModel = ui->tableView->selectionModel();
QModelIndexList list = sModel->selectedRows();//取出模型中的索引
for(int i=0;i<list.size();i++)//删除选中的行
{
model->removeRow(list.at(i).row());
}
}
void Widget::on_pushButton_5_clicked() //查找
{
QString str = ui->lineEdit->text();
QString sname = QString("name = '%1'").arg(str);//打包
model->setFilter(sname);
model->select(); //再次显示一次
}
直接运行效果如图:
点击增加后效果如下图,多了一空白行,双击可进行直接修改添加数据
进行删除操作可框选数据,鼠标框选第一行后点击删除 如下图
查找时在输入框输入需要查找的名字如 xiaolong,效果如下: