Qt-可视化数据库操作
2024-10-09 08:06:59
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();
}
最新文章
- 戏说HTML5
- TurboDemo软件使用教程:视频编辑
- jQuery MiniUI开发系列之:创建组件对象
- HDU1011 树形DP
- pyhton 27 pip命令无法使用 没有Scripts文件夹 的解决方法
- zw版【转发&#183;台湾nvp系列Delphi例程】HALCON Histogram
- x名称空间
- Android模拟器中安装APK文件(转)
- 通过MyEclipse生成Hibernate类文件和hbm.xml文件,或者annotation文件
- Extension Method[下篇]
- LSI MegaCl i命令使用1
- 算法起步之Bellman-Ford算法
- [转]解决get方法传递URL参数中文乱码问题
- Lua利用cjson读写json
- highCharts实现简单柱形图
- MySQL binlog 日志
- Entitas Learning Document
- Flask上下文
- 自助Linux之问题诊断工具strace【转】
- Mac上搭建nginx教程
热门文章
- C语言宏技巧 X宏
- 容器中的Java堆大小调整:快速,轻松
- vue学习第二天:Vue跑马灯效果制作
- 39 _ 队列5 _ 循环队列需要几个参数来确定 及其含义的讲解.swf
- npm -v 报错:Error: EPERM: operation not permitted, mkdir &#39;C:\soft\nodejs&#39;
- Python 简明教程 --- 13,Python 集合
- Day12-微信小程序实战-交友小程序-优化“附近的人”页面与serach组件的布局和样式以及搜索历史记录和本地缓存*内附代码)
- SpringBoot--日期格式化
- git push和pull如何解决冲突!!!精品
- caffe的python接口学习(4)mnist实例手写数字识别