QT可视化编程(QSqlTableModel类的使用)
QT可视化编程(QSqlTableModel类的使用)
1.QSqlTableModel类简述
QSqlTableModel类为单个数据库表提供了一个可编辑的数据模型。QSqlTableModel是一个高级接口,用于从单个表读取和写入数据库记录。它构建在低层QSqlQuery之上,可以用来提供数据来查看类。
2.准备
- 创建项目:
文件→创建文件或工程→Qt控件项目→QtGui项目→点击选择→提示创建一个带ui界面的项目。
- .pro文件加入sql模块 :
QT += sql
3.数据库操作
- 连接数据及打开数据库
//打印数据库的驱动的模块
qDebug()<<":::::::::驱动::::::::::"<<QSqlDatabase::drivers();
QSqlDatabase database;
//连接数据库
if (QSqlDatabase::contains("qt_sql_default_connection"))
{
database = QSqlDatabase::database("qt_sql_default_connection");
}
else
{
database = QSqlDatabase::addDatabase("QSQLITE");
database.setDatabaseName("test2.db");
}
//打开数据库
if(!database.open())
{
qDebug()<<"打开数据库失败!!"<<database.lastError();
}
else
{
qDebug()<<"打开数据库成功!!";
}
4.类的头文件中添加类的成员变量,QSqlTableModel指针对象
QSqlTableModel *model;
5.QSqlTableModel对象常用操作
//设置模型
model = new QSqlTableModel(this);
//指定用哪张表
model->setTable("stuInfo");
//设置tableview的model(这样还没有数据)
ui->tableView->setModel(model);
//显示查询的数据
model->select();
//修改列的属性名
model->setHeaderData(0,Qt::Horizontal,"学号");//设置第一列列名
model->setHeaderData(1,Qt::Horizontal,"姓名");//设置第二列列名
//手动修改方式
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
//view 不让修改 权限 管理
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
6.增加操作
void modelView::on_pushButton_add_clicked()
{
//增加一行空记录
QSqlRecord record = model->record();
//设置行号
int row = model->rowCount();
qDebug()<<"row:"<<row;
model->insertRecord(row,record);
}
7.删除操作
void modelView::on_pushButton_del_clicked()
{
//选中多行删除
//获取选中的模型
QItemSelectionModel *itemModel = ui->tableView->selectionModel();
//取出模型中的索引
QModelIndexList list = itemModel->selectedRows();
//输入list里面的数据的行号进行删除
for(int i= 0; i<list.size(); i++)
{
model->removeRow(list.at(i).row());
}
}
8.查询操作
void modelView::on_pushButton_find_clicked()
{
QString name = ui->lineEdit->text();
QString str = QString("stuName = '%1'").arg(name);
model->setFilter(str);
model->select();
}
9.确认和取消操作
void modelView::on_pushButton_yes_clicked()
{
//提交所有更改
model->submitAll();
}
void modelView::on_pushButton_cancel_clicked()
{
//取消所有操作
model->revertAll();
}
10.查询所有数据
void modelView::on_pushButton_clicked()
{
model->setTable("stuInfo");//指定用哪张表
ui->tableView->setModel(model);//设置tableview的model(这样还没有数据)
model->select();//显示查询的数据
}
11.UI界面