QTableView实现在表格内直接对数据库内容进行修改、新增和删除等操作
前言
本文主要利用QSqlTableModel+QTableView来实现直接在QTableView中进行对数据库数据的操作
新增:点击新增按钮之后,光标直接移到最后一行,然后双击进行表内容的填充。
删除:选中一行之后,点击删除。
修改:选中一行,点击修改,此时表内容可修改。
提交:将进行的操作提交到数据库操作。
取消:取消操作。

QSqlTableModel
简易用法:
// QSqlTableModel(QObject*, QSqlDatabase)
m_sqlModel = new QSqlTableModel(this, m_access->m_sqlDatabase);
// setTable -> tableName 就是你要查询的表名
m_sqlModel->setTable("tableName");
// 设置为手动刷新,用来达到需要手动提交的效果
m_sqlModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
新增
新增的主要逻辑是fetchMore到最后一行,然后再最后一行处添加一行空的数据,然后将表格设置为可编辑状态,然后再双击进行编辑
void ThresholdManage::on_btnNew_clicked()
{
// 设置编辑模式
// m_editMode是自定义变量,用于标识当前是否是编辑状态
m_editMode = true;
// 将其余功能按键禁用,将提交和取消启用
ui->btnEdit->setDisabled(true);
ui->btnNew->setDisabled(true);
ui->btnDelete->setDisabled(true);
ui->btnCancel->setEnabled(true);
ui->btnSubmit->setEnabled(true);
// m_sqlModel每次只能最大缓存256个,所以需要先fetchMore
// 否则会导致移动到最后一行时,只会最多移到256行
while (m_sqlModel->canFetchMore()) {
m_sqlModel->fetchMore();
}
int rowCount = m_sqlModel->rowCount();
// 在rowCount处添加一行
m_sqlModel->insertRow(rowCount);
m_sqlModel->setData(m_sqlModel->index(rowCount, 0), "");
// 设置双击编辑
ui->tableView->setEditTriggers(QTableView::DoubleClicked);
// 滚动到底部
ui->tableView->scrollToBottom();
}

删除
删除是直接removeRow,删除当前选中行,然后submitAll
void ThresholdManage::on_btnDelete_clicked()
{
// 找到当前行,然后removeRow
auto index = ui->tableView->currentIndex();
m_sqlModel->removeRow(index.row());
// 删除前,弹框确认
int ok = QMessageBox::warning(this, "删除当前行!", "确定删除当前行?", QMessageBox::Yes, QMessageBox::No);
if (ok == QMessageBox::No) {
m_sqlModel->revertAll();
return;
}
// 提交
m_sqlModel->submitAll();
// 查询
m_sqlModel->select();
}

修改
修改是将表格的编辑模式打开
void ThresholdManage::on_btnEdit_clicked()
{
// TODO
// 将其余按键状态置灰
m_editMode = true;
// 将表格的编辑模式打开
ui->tableView->setEditTriggers(QAbstractItemView::DoubleClicked);
ui->btnNew->setDisabled(true);
ui->btnNew->setDisabled(true);
ui->btnDelete->setDisabled(true);
ui->btnCancel->setEnabled(true);
ui->btnSubmit->setEnabled(true);
}

提交
提交是submitAll
void ThresholdManage::on_btnSubmit_clicked()
{
// TODO
// 刷新表格的内容
m_editMode = false;
// 提交弹框确认
int ok = QMessageBox::warning(this, "提交修改", "确定提交修改?", QMessageBox::Yes, QMessageBox::No);
if (ok == QMessageBox::No) {
qDebug() << "取消提交";
return;
}
// 提交修改
m_sqlModel->submitAll();
ui->btnNew->setEnabled(true);
ui->btnEdit->setEnabled(true);
ui->btnDelete->setEnabled(true);
ui->btnCancel->setDisabled(true);
ui->btnSubmit->setDisabled(true);
// 将表格置为不可修改
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
}

取消
取消是revertAll
void ThresholdManage::on_btnCancel_clicked()
{
// TODO
// 刷新表格的内容
m_editMode = false;
// 取消所有
m_sqlModel->revertAll();
ui->btnNew->setEnabled(true);
ui->btnEdit->setEnabled(true);
ui->btnDelete->setEnabled(true);
ui->btnCancel->setDisabled(true);
ui->btnSubmit->setDisabled(true);
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
}
代码如下:资源
刚刚发现这个资源我上传的时候我设置的不需要积分,但是后台自动给我加了积分…可以访问这个下载
QTableView实现在表格内直接对数据库内容进行修改、新增和删除等操作的更多相关文章
- C#使用Command将dataGrideView表格内数据与数据库交互
本文主要介绍通过Command类使用SQL插入指令insert与查询指令select将dataGrideView表格内添加至数据库,与从数据库读出数据存放在dataGrideView表格中. C#制作 ...
- 怎么把excel表格内的数据导入数据库?
第一种方法: 思路:想要把excel表格内的数据直接导入数据库不是那么容易,可以把excel表格另存为.csv格式的文档(特点:内容以逗号分割):然后通过一系列的文档操作函数处理成为一个二维数组,然后 ...
- Qt QTableView 表格内添加控件
目录 Qt QTableView 表格内添加控件 1. QItemDelegate 2. setIndexWidget 3. setIndexWidget + setLayout Qt QTableV ...
- jsp+oracle实现数据库内容以表格形式在前台显示(包含分页)
jsp+oracle实现数据库内容以表格形式在前台显示(包含分页) 在文件夹内新增list_emp.jsp 代码如下: <%@ page contentType="text/html& ...
- Linqpad使用(调试Linq、结合linq调试业务场景、表格内编辑数据)
linqpad是一款linq语句调试工具,功能如下: 1.直接执行linq语句并查看生成的原生sql语句 2.可结合linq+C#代码进行业务场景调试 3.表格内直接新增.修改.删除数据 4.直接 ...
- 如何将Excl内数据导入数据库?
最近有个Excl表格内的数据需要导入SQL Server数据库内,使用SQL Server Management Studio客户端图形界面操作了一番,步骤还挺多,感觉有必要分享给大家一下,顺便自己也 ...
- Latex 表格内公式换行方法
Latex 表格内的公式实现换行的方法 简单的两步走: 1.先将下面的语句放在latex正文的导言区: \newcommand{\tabincell}[2]{\begin{tabula ...
- 外网访问内网MariaDB数据库
外网访问本地MariaDB数据库 本地安装了MariaDB数据库,只能在局域网内访问,怎样从公网也能访问内网MariaDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Mar ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
随机推荐
- OpenCV4.1.0与CUDAcuda_10.1.105联合进行图像特征点提取和特征匹配时,运行程序时错误提示:无法定位程序输入点?createBFMatchercv@DescriptorMatcher@cuda@cv......于动态链接库......
问题描述: OpenCV4.1.0与CUDAcuda_10.1.105联合进行图像特征点提取和特征匹配时,运行程序时错误提示:无法定位程序输入点?createBFMatchercv@Descripto ...
- error C2664: “HANDLE FindFirstFileW(LPCWSTR,LPWIN32_FIND_DATAW)”: 无法将参数 1 从“const _Elem *”转换为“LPCWSTR”
Error 30 error C2664: 'HANDLE FindFirstFileW(LPCWSTR,LPWIN32_FIND_DATAW)' : 不能将参数 1 从"char [260 ...
- vivo手机上的系统级消息推送平台的架构设计实践
本文由vivo互联网服务器团队李青鑫分享,有较多修订和改动. 1.引言 本文内容来自vivo互联网服务器团队李青鑫在"2021 vivo开发者大会"现场的演讲内容整理而成(现场演讲 ...
- 基于NVIDIA NGC容器安装使用PaddlePaddle
基于NVIDIA NGC容器安装使用PaddlePaddle PaddlePaddle PaddlePaddle作为国内首个自主研发的深度学习平台,自2016年正式向专业社区开源,是一个技术先进.功能 ...
- ArchLinux安装后常见问题的解决
Q:UEFI引导grub-install报错:variables are not support on this system A:进入安装u盘的时候是传统引导模式,传统模式下无法安装UEFI启动,解 ...
- 深入解析 Spring AI 系列:项目结构一览
从今天起,我们将以 Spring AI 为主线,开始更新一系列的文章.这些文章将围绕 Spring AI 项目展开,结合我的理解,深入讲解其相关的知识点.技术原理.以及在实际开发过程中涉及到的部分代码 ...
- C51--05---LCD1602调试工具
一.LCD1602调试工具 单片机调试工具: 数码管 液晶屏 串口 数码管需要不断进行扫描,一旦扫描不及时就会不断闪烁,并且可显示的数据太过局限: 串口需要使用电脑进行发送指令,不易操作与携带: 所以 ...
- c# 创建快捷方式并添加到开始菜单程序目录
Using the Windows Script Host (make sure to add a reference to the Windows Script Host Object Model, ...
- Graph DataBase介绍-图数据库
前言分析社会关系这类复杂图壮结构的海量数据,使用图形数据库(Graph DataBase)是最好的选择.– 作者:李祎 <程序员>介绍各种NoSQL 数据库的文章已经很多,不过大部分都是基 ...
- 学Shiro完结版-4
第十四章 SSL--<跟我学Shiro> 对于SSL的支持,Shiro只是判断当前url是否需要SSL登录,如果需要自动重定向到https进行访问. 首先生成数字证书,生成证书到D:\lo ...