1  简介

参考视频:https://www.bilibili.com/video/BV1XW411x7NU?p=89

说明:Qt可使用QSqlTableModel来进行数据库的可视化操作,将mode/view与数据库结合起来使用,本文主要介绍使用QSqlTableModel来显示数据库的方法。

mode/view你就当作对象的可视化,这里我们操作的对象就是数据库。

2  测试及说明

我们需要使用的数据库已有一些数据,数据库如下:

需要使用到Qt的Table View组件:

创建的界面如下:

可使用增加、删除、确认、取消、查找(已name进行查找)按钮来对数据库进行相应的操作。

先给出运行测试的效果:

代码步骤说明:

(1)添加数据库、打开数据库、连接数据库

这个步骤,之前的博客有介绍,就直接给出代码:

     //添加MySql数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
//连接数据库
db.setHostName("127.0.0.1"); //数据库服务器IP
db.setUserName("root"); //数据库用户名
db.setPassword(""); //密码
db.setDatabaseName("test"); //使用哪个数据库
//打开数据库
if (db.open() == false) {
QMessageBox::warning(this, "错误", db.lastError().text());
return;
}

(2)设置模型

     //设置模型
model = new QSqlTableModel(this);

(3)指定使用哪张表

     //指定使用哪个表
model->setTable("student");

(4)把model放置到View里面

     //把model放置到view里面
ui->tableView->setModel(model);

(5)显示mode的数据

     //显示model里的数据
model->select();

(6)设置mode的编辑模式为手动提交修改

     //设置model的编辑模式,手动提交修改
model->setEditStrategy(QSqlTableModel::OnManualSubmit);

(7)增加

 void Widget::on_pushButton_add_clicked()
{
//添加空记录
QSqlRecord record = model->record(); //获取空记录
//获取行号
int row = model->rowCount();
//添加空行
model->insertRecord(row, record);
}

(8)删除

 void Widget::on_pushButton_delete_clicked()
{
//获取选中的模型
QItemSelectionModel *sModel = ui->tableView->selectionModel();
//取出模型中的索引
QModelIndexList list = sModel->selectedRows();
//删除所有选中的行
for (int i = ; i < list.size(); i++) {
model->removeRow(list.at(i).row());
}
}

(9)确认

 void Widget::on_pushButton_sure_clicked()
{
//提交所有动作
model->submitAll();
}

(10)取消

 void Widget::on_pushButton_cancel_clicked()
{
//取下所有动作
model->revertAll();
//提交所有动作
model->submitAll();
}

(11)查找

 void Widget::on_pushButton_find_clicked()
{
//以name进行查找
QString key = ui->lineEdit->text();
QString str = QString("name = '%1'").arg(key);
//过滤条件
model->setFilter(str);
model->select();
}

完整代码如下:

 #include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QSqlDatabase>
#include <QMessageBox>
#include <QSqlError>
#include <QSqlQuery>
#include <QSqlTableModel>
#include <QSqlRecord>
#include <QItemSelectionModel> Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this); //打印qt支持的数据库驱动
qDebug() << QSqlDatabase::drivers(); //添加MySql数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
//连接数据库
db.setHostName("127.0.0.1"); //数据库服务器IP
db.setUserName("root"); //数据库用户名
db.setPassword(""); //密码
db.setDatabaseName("test"); //使用哪个数据库
//打开数据库
if (db.open() == false) {
QMessageBox::warning(this, "错误", db.lastError().text());
return;
}
//设置模型
model = new QSqlTableModel(this);
//指定使用哪个表
model->setTable("student");
//把model放置到view里面
ui->tableView->setModel(model);
//显示model里的数据
model->select(); // model->setHeaderData(0, Qt::Horizontal, "学号"); //设置model的编辑模式,手动提交修改
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
//设置数据库不允许修改
// ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
} Widget::~Widget()
{
delete ui;
} void Widget::on_pushButton_add_clicked()
{
//添加空记录
QSqlRecord record = model->record(); //获取空记录
//获取行号
int row = model->rowCount();
//添加空行
model->insertRecord(row, record);
} void Widget::on_pushButton_delete_clicked()
{
//获取选中的模型
QItemSelectionModel *sModel = ui->tableView->selectionModel();
//取出模型中的索引
QModelIndexList list = sModel->selectedRows();
//删除所有选中的行
for (int i = ; i < list.size(); i++) {
model->removeRow(list.at(i).row());
}
} void Widget::on_pushButton_sure_clicked()
{
//提交所有动作
model->submitAll();
} void Widget::on_pushButton_cancel_clicked()
{
//取下所有动作
model->revertAll();
//提交所有动作
model->submitAll();
} void Widget::on_pushButton_find_clicked()
{
//以name进行查找
QString key = ui->lineEdit->text();
QString str = QString("name = '%1'").arg(key);
//过滤条件
model->setFilter(str);
model->select();
}

最新文章

  1. 戏说HTML5
  2. TurboDemo软件使用教程:视频编辑
  3. jQuery MiniUI开发系列之:创建组件对象
  4. HDU1011 树形DP
  5. pyhton 27 pip命令无法使用 没有Scripts文件夹 的解决方法
  6. zw版【转发&#183;台湾nvp系列Delphi例程】HALCON Histogram
  7. x名称空间
  8. Android模拟器中安装APK文件(转)
  9. 通过MyEclipse生成Hibernate类文件和hbm.xml文件,或者annotation文件
  10. Extension Method[下篇]
  11. LSI MegaCl i命令使用1
  12. 算法起步之Bellman-Ford算法
  13. [转]解决get方法传递URL参数中文乱码问题
  14. Lua利用cjson读写json
  15. highCharts实现简单柱形图
  16. MySQL binlog 日志
  17. Entitas Learning Document
  18. Flask上下文
  19. 自助Linux之问题诊断工具strace【转】
  20. Mac上搭建nginx教程

热门文章

  1. C语言宏技巧 X宏
  2. 容器中的Java堆大小调整:快速,轻松
  3. vue学习第二天:Vue跑马灯效果制作
  4. 39 _ 队列5 _ 循环队列需要几个参数来确定 及其含义的讲解.swf
  5. npm -v 报错:Error: EPERM: operation not permitted, mkdir &#39;C:\soft\nodejs&#39;
  6. Python 简明教程 --- 13,Python 集合
  7. Day12-微信小程序实战-交友小程序-优化“附近的人”页面与serach组件的布局和样式以及搜索历史记录和本地缓存*内附代码)
  8. SpringBoot--日期格式化
  9. git push和pull如何解决冲突!!!精品
  10. caffe的python接口学习(4)mnist实例手写数字识别