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();
}

Qt-可视化数据库操作的更多相关文章

  1. 界面编程之QT的数据库操作20180801

    /*******************************************************************************************/ 一.数据库连 ...

  2. qt 5 数据库操作(mysql)

    其实大家都知道,QT5以上的都自带了数据库驱动,所以呢,基本上可以直接使用,于是如果想知道怎么连接数据库,请参考这位大神写的.http://qtdebug.com/DB-AccessMySQL.htm ...

  3. 【转载】QT MySQL数据库操作总结

    转载自http://blog.chinaunix.net/uid-28194872-id-3631462.html #include <QtSql> QT += sqlQSqlDataba ...

  4. qt sql 数据库操作

    1.  连接数据库 mysql连接: QSqlDatabase mysql_db=QSqlDatabase::addDatabase("QMYSQL","mysql_co ...

  5. 2.关于QT中数据库操作,简单数据库连接操作,数据库的增删改查,QSqlTableModel和QTableView,事务操作,关于QItemDelegate 代理

     Linux下的qt安装,命令时:sudoapt-get install qt-sdk 安装mysql数据库,安装方法参考博客:http://blog.csdn.net/tototuzuoquan ...

  6. MySQL----navicat for mysql(破解版)可视化数据库操作

    本博文介绍破解版navicat for mysql的安装方法及常用操作 navicat for mysql是一个专业的MySQL数据库图形化界面工具. 百度云下载地址:https://pan.baid ...

  7. Qt 多线程与数据库操作需要注意的几点问题(QSqlDatabase对象只能在当前线程里使用)

    彻底抛弃MFC, 全面应用Qt 已经不少时间了.除了自己看书按步就班做了十几个验证性的应用,还正式做了3个比较大的行业应用,总体感觉很好.Native C++ 下, Qt 基本是我用过的最简便的界面库 ...

  8. Qt 多线程与数据库操作需要注意的几点问题

    源地址:http://blog.csdn.net/goldenhawking/article/details/10811409 彻底抛弃MFC, 全面应用Qt 已经不少时间了.除了自己看书按步就班做了 ...

  9. Qt: 数据库操作;

    QT的数据库操作有两种方式: 一) 使用QsqlTableModel类, 可以配合QTableView进行界面显示并进行数据库操作, 这种方法比较方便快捷: 二)  使用原始SQL语言, 利用INSE ...

  10. Qt 学习之路 2(55):数据库操作

    Qt 提供了 QtSql 模块来提供平台独立的基于 SQL 的数据库操作.这里我们所说的“平台独立”,既包括操作系统平台,又包括各个数据库平台.另外,我们强调了“基于 SQL”,因为 NoSQL 数据 ...

随机推荐

  1. 多语言工作者の十日冲刺<1/10>

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺--第一天(04.30) 作业正文 ...

  2. 旷世提出类别正则化的域自适应目标检测模型,缓解场景多样的痛点 | CVPR 2020

    论文基于DA Faster R-CNN系列提出类别正则化框架,充分利用多标签分类的弱定位能力以及图片级预测和实例级预测的类一致性,从实验结果来看,类该方法能够很好地提升DA Faster R-CNN系 ...

  3. 黎活明8天快速掌握android视频教程--23_网络通信之网络图片查看器

    1.首先新建立一个java web项目的工程.使用的是myeclipe开发软件 图片的下载路径是http://192.168.1.103:8080/lihuoming_23/3.png 当前手机和电脑 ...

  4. ant+jmeter+jenkins接口自动化测试一

    [Jmeter篇]jmeter+Ant+Jenkins接口自动化测试集成(一) 橙子探索测试发表于橙子探索测试订阅 90 一.简介 1.什么是ant? ant是构建工具,把代码从某个地方拿来,编译,再 ...

  5. VM363:1 Uncaught SyntaxError: Invalid or unexpected token

    此报错主要是因为json字符串转json对象时,json字符串中出现特殊字符(如:换行符)报错. json字符转json对象(如下写则报错) 更改后 参考地址: https://www.cnblogs ...

  6. vue-cli按装 和vue创建项目

    安装 创建

  7. iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destination 172.17.0.2:3306 ! -i docker0: iptables: No chain/target/match by that name

    今天使用docker运行mysql时报错, 执行命令: docker run --restart=always --name mysql5.7 -p 3306:3306 -v /data/mysql/ ...

  8. 计算机组成原理Day-1

  9. API(List、Map)

    day 07 API List接口 特点: 有序,带索引,内容可以重复 Arraylist: 创建对象一般使用多态的格式: List<E> li = new ArrayList<E& ...

  10. wsl环境下配置ubuntu16.04

    wsl环境下配置ubuntu16.04 在公司同事的安利下,终于给自己用了8年的老笔记本(戴尔XPS L502X)换上了固态硬盘(WD500G,SATA3接口) 当然,系统重装了一遍,所有的软件也都没 ...