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. 009.OpenShift管理及监控

    一 资源限制 1.1 pod资源限制 pod可以包括资源请求和资源限制: 资源请求 用于调度,并控制pod不能在计算资源少于指定数量的情况下运行.调度程序试图找到一个具有足够计算资源的节点来满足pod ...

  2. 搜索引擎ElasticSearch入门

    前言 最近项目上需要用到搜索引擎,由于之前自己没有了解过,所以整理了一下搜索引擎的相关概念知识. 正文 想查数据就免不了搜索,搜索就离不开搜索引擎,百度.谷歌都是一个非常庞大复杂的搜索引擎,他们几乎索 ...

  3. SpringCloud之初识Feign

    在前面的学习中,我们使用了Ribbon的负载均衡功能,大大简化了远程调用时的代码: String baseUrl = "http://user-service/user/"; Us ...

  4. android自定义控件onLayout方法

    onLayout设置子控件的位置,对应一些普通的控件例如Button.TextView等控件,不存在子控件,所以可以不用复写该方法. 向线性布局.相对布局等存在子控件,可以覆写该方法去控制子控件的位置 ...

  5. MTPuTTy使用

    在开发过程中我们常常会有连接远程 lunix 服务器的需求,这个时候我们需要一个工具来帮助我们做这件事,而这类工具就是远程连接工具.常见的工具有XShell,SecureCRT,Putty等.这里我选 ...

  6. spring quartz 每30分钟执行一次cronExpression表达式怎么写

      <cron-expression>0 0/30 * * * ?</cron-expression>:每隔30分钟 <cron-expression>0 0/15 ...

  7. python中lambda匿名函数与函数之间的关系

  8. (私人收藏)2019WER积木教育机器人赛(普及赛)基础解决方案

    2019WER积木教育机器人赛(普及赛)基础解决方案 含地图.基础解决方案.全部路线的往返.详细规则.视频.搭建方案 EV3;乐高;机器人比赛;能力风暴;WER https://pan.baidu.c ...

  9. LESS 原理,一款css的预处理程序Less的使用

    ​Less一种动态样式语言,LESS将CSS赋予了动态语言的特性,如变量,继承,运算,函数...LESS 既可以在客户端上运行 (支持IE 6+, Webkit, Firefox),也可以借助Node ...

  10. 免费馅饼——移动dp

    免费馅饼 题目描述 SERKOI最新推出了一种叫做"免费馅饼"的游戏: 游戏在一个舞台上进行.舞台的宽度为 \(W\) 格,天幕的高度为 \(H\) 格,游戏者占一格. 开始时游戏 ...