1 简介
说明:Qt可使用QSqlTableModel来进行数据库的可视化操作,将mode/view与数据库结合起来使用,本文主要介绍使用QSqlTableModel来显示数据库的方法。
mode/view你就当作对象的可视化,这里我们操作的对象就是数据库。
2 测试及说明
我们需要使用的数据库已有一些数据,数据库如下:
需要使用到Qt的Table View组件:
创建的界面如下:
可使用增加、删除、确认、取消、查找(已name进行查找)按钮来对数据库进行相应的操作。
先给出运行测试的效果:
代码步骤说明:
(1)添加数据库、打开数据库、连接数据库
这个步骤,之前的博客有介绍,就直接给出代码:
1 //添加MySql数据库
2 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");3 //连接数据库
4 db.setHostName("127.0.0.1"); //数据库服务器IP
5 db.setUserName("root"); //数据库用户名
6 db.setPassword("123456"); //密码
7 db.setDatabaseName("test"); //使用哪个数据库8 //打开数据库
9 if (db.open() == false) {10 QMessageBox::warning(this, "错误", db.lastError().text());11 return;12 }
(2)设置模型
1 //设置模型
2 model = new QSqlTableModel(this);
(3)指定使用哪张表
1 //指定使用哪个表
2 model->setTable("student");
(4)把model放置到View里面
1 //把model放置到view里面
2 ui->tableView->setModel(model);
(5)显示mode的数据
1 //显示model里的数据
2 model->select();
(6)设置mode的编辑模式为手动提交修改
1 //设置model的编辑模式,手动提交修改
2 model->setEditStrategy(QSqlTableModel::OnManualSubmit);
(7)增加
1 voidWidget::on_pushButton_add_clicked()2 {3 //添加空记录
4 QSqlRecord record = model->record(); //获取空记录5 //获取行号
6 int row = model->rowCount();7 //添加空行
8 model->insertRecord(row, record);9 }
(8)删除
1 voidWidget::on_pushButton_delete_clicked()2 {3 //获取选中的模型
4 QItemSelectionModel *sModel = ui->tableView->selectionModel();5 //取出模型中的索引
6 QModelIndexList list = sModel->selectedRows();7 //删除所有选中的行
8 for (int i = 0; i < list.size(); i++) {9 model->removeRow(list.at(i).row());10 }11 }
(9)确认
1 voidWidget::on_pushButton_sure_clicked()2 {3 //提交所有动作
4 model->submitAll();5 }
(10)取消
1 voidWidget::on_pushButton_cancel_clicked()2 {3 //取下所有动作
4 model->revertAll();5 //提交所有动作
6 model->submitAll();7 }
(11)查找
1 voidWidget::on_pushButton_find_clicked()2 {3 //以name进行查找
4 QString key = ui->lineEdit->text();5 QString str = QString("name = '%1'").arg(key);6 //过滤条件
7 model->setFilter(str);8 model->select();9 }
完整代码如下:
1 #include "widget.h"
2 #include "ui_widget.h"
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11
12 Widget::Widget(QWidget *parent) :13 QWidget(parent),14 ui(newUi::Widget)15 {16 ui->setupUi(this);17
18 //打印qt支持的数据库驱动
19 qDebug() <<:drivers>
21 //添加MySql数据库
22 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");23 //连接数据库
24 db.setHostName("127.0.0.1"); //数据库服务器IP
25 db.setUserName("root"); //数据库用户名
26 db.setPassword("123456"); //密码
27 db.setDatabaseName("test"); //使用哪个数据库28 //打开数据库
29 if (db.open() == false) {30 QMessageBox::warning(this, "错误", db.lastError().text());31 return;32 }33 //设置模型
34 model = new QSqlTableModel(this);35 //指定使用哪个表
36 model->setTable("student");37 //把model放置到view里面
38 ui->tableView->setModel(model);39 //显示model里的数据
40 model->select();41
42 //model->setHeaderData(0, Qt::Horizontal, "学号");43
44 //设置model的编辑模式,手动提交修改
45 model->setEditStrategy(QSqlTableModel::OnManualSubmit);46 //设置数据库不允许修改47 //ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
48 }49
50 Widget::~Widget()51 {52 deleteui;53 }54
55 voidWidget::on_pushButton_add_clicked()56 {57 //添加空记录
58 QSqlRecord record = model->record(); //获取空记录59 //获取行号
60 int row = model->rowCount();61 //添加空行
62 model->insertRecord(row, record);63 }64
65 voidWidget::on_pushButton_delete_clicked()66 {67 //获取选中的模型
68 QItemSelectionModel *sModel = ui->tableView->selectionModel();69 //取出模型中的索引
70 QModelIndexList list = sModel->selectedRows();71 //删除所有选中的行
72 for (int i = 0; i < list.size(); i++) {73 model->removeRow(list.at(i).row());74 }75 }76
77 voidWidget::on_pushButton_sure_clicked()78 {79 //提交所有动作
80 model->submitAll();81 }82
83 voidWidget::on_pushButton_cancel_clicked()84 {85 //取下所有动作
86 model->revertAll();87 //提交所有动作
88 model->submitAll();89 }90
91 voidWidget::on_pushButton_find_clicked()92 {93 //以name进行查找
94 QString key = ui->lineEdit->text();95 QString str = QString("name = '%1'").arg(key);96 //过滤条件
97 model->setFilter(str);98 model->select();99 }
View Code