运行结果图:
QSqlTableModel操作QSQLITE:
a) 连接QSQLIITE驱动。
b) 不用连接数据库那些代码
c) 其他代码和操作MYSQL相同
MYWidget.CPP
#include "widget.h"
#include "ui_widget.h"
#include<QSqlDatabase>//数据库
#include<QMessageBox>
#include<QSqlError>//sql错误信息
#include<QSqlQuery>//sql语句类
#include<QVariantList>//泛型
#include<QDebug>
#include<QSqlTableModel>//表格模型,显示模型的数据 需要试图QTableview来显示
#include<QSqlRecord>//数据库记录
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//打印Qt支持的数据库驱动
qDebug()<<QSqlDatabase::drivers();
//添加MySql数据库
//只连接一个数据库,addDatabase第二个参数不用写
QSqlDatabase db= QSqlDatabase::addDatabase("QMYSQL");
//链接数据库
db.setHostName("127.0.0.1");//数据库服务器IP
db.setUserName("root");//数据库用户名
db.setPassword("root");//数据库密码
db.setDatabaseName("dbtest1");//使用那个数据库
//打开数据库
if(db.open()==false)
{
QMessageBox::information(this,"失败",db.lastError().text());
return;
}
//设置模型
mod=new QSqlTableModel(this);
mod->setTable("student");//指定使用哪个表,前提库已打开
//把mod放在view
ui->tableView->setModel(mod);
// 显示model里的数据
mod->select();
//改列头部名称
mod->setHeaderData(0,Qt::Horizontal,"学号");
//设置mod的编辑模式,手动提交修改
mod->setEditStrategy(QSqlTableModel::OnManualSubmit);
//设置view中的数据库不能被修改
//ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
}
Widget::~Widget()
{
delete ui;
}
//增加
void Widget::on_buttonadd_clicked()
{
//添加空记录
QSqlRecord record=mod->record();//获取空记录
//获取行号
int row=mod->rowCount();
mod->insertRecord(row,record);//像数组从0开始,-1直接表尾插
}
//确定
void Widget::on_buttonsure_clicked()
{
//提交
mod->submitAll();
}
//取消
void Widget::on_buttoncancel_clicked()
{
//取消
mod->revertAll();
mod->submitAll();
}
//删除
void Widget::on_buttondelete_clicked()
{
//获取选中的模型
QItemSelectionModel* smod= ui->tableView->selectionModel();
//取出模型的索引
QModelIndexList list= smod->selectedRows();
//删除所有选中的行
for(int i=0;i<list.size();i++)
{
mod->removeRow( list.at(i).row());
}
}
void Widget::on_buttonfind_clicked()
{
QString name=ui->lineEdit->text();
QString str=QString("name = '%1'").arg(name);
mod->setFilter(str);
mod->select();
}
void Widget::on_pushButton_clicked()
{
mod->setTable("student");
ui->tableView->setModel(mod);
mod->select();
mod->setHeaderData(0,Qt::Horizontal,"学号");
}