QSqlRelationalTableModel 增删改查

QSqlRelationalTableModel 可以作为关系数据表的模型类,适用于三范式设计的表,主表中自动加载外键表中的名称。本文实现QSqlRelationalTableModel 为模型类,实现增删改查。

目录

0.表准备

1. 构建表格数据

声明变量

 表格、数据模型、选择模型三板斧设置

列表的水平表头设置

设置表关系字段的映射关系

执行查询

2. 新增一行

Append行

Insert行

3. 保存 & 撤销操作

保存

撤销 

4.删除一行

总结


0.表准备

关系图如下

1. 构建表格数据

声明变量

    QSqlRelationalTableModel *tabModel;//数据库模型QItemSelectionModel *selModel;//选择模型SQLiteHelper dbHelper;

 表格、数据模型、选择模型三板斧设置

    //数据模型tabModel = new QSqlRelationalTableModel(this);tabModel->setTable("studInfo");tabModel->setEditStrategy(QSqlTableModel::OnManualSubmit);tabModel->setSort(tabModel->fieldIndex("studID"),Qt::AscendingOrder);//选择模型selModel = new QItemSelectionModel(tabModel,this);connect(selModel,&QItemSelectionModel::currentRowChanged,this,&SqlRelationExample::do_currentChanged);//表格控件ui->tableView->setModel(tabModel);ui->tableView->setSelectionModel(selModel);

列表的水平表头设置

    //设置水平表头tabModel->setHeaderData(tabModel->fieldIndex("studID"),Qt::Horizontal,"学号");tabModel->setHeaderData(tabModel->fieldIndex("name"),Qt::Horizontal,"姓名");tabModel->setHeaderData(tabModel->fieldIndex("gender"),Qt::Horizontal,"性别");tabModel->setHeaderData(tabModel->fieldIndex("departID"),Qt::Horizontal,"学院");tabModel->setHeaderData(tabModel->fieldIndex("majorID"),Qt::Horizontal,"专业");

设置表关系字段的映射关系

 //设置代码字段的关系tabModel->setRelation(tabModel->fieldIndex("departID"),QSqlRelation("departments","departID","department"));tabModel->setRelation(tabModel->fieldIndex("majorID"),QSqlRelation("majors","majorID","major"));//为关系型字段设置默认代理组件ui->tableView->setItemDelegate(new QSqlRelationalDelegate(ui->tableView));

如上,QSqlRelation方法中三个变量依次为(表名,ID,显示名称)

执行查询

    tabModel->select();

2. 新增一行

Append行

原理是在最后一行的位置插入一行

    tabModel->insertRow(tabModel->rowCount(),QModelIndex());QModelIndex curIndex = tabModel->index(tabModel->rowCount()-1,0);//最后一行,第一列selModel->clearSelection();selModel->setCurrentIndex(curIndex,QItemSelectionModel::Select);//设置当前行

Insert行

在指定的位置插入一行

    QModelIndex curIndex = ui->tableView->currentIndex();tabModel->insertRow(curIndex.row(),QModelIndex());selModel->clearSelection();selModel->setCurrentIndex(curIndex,QItemSelectionModel::Select);

3. 保存 & 撤销操作

保存

将做的修改,新增,插入等操作 ,全部提交

  bool res = tabModel->submitAll();if(!res)QMessageBox::critical(this,"错误提示","数据保存错误:\n"+tabModel->lastError().text());

撤销 

将做的修改,新增,插入等操作 ,全部撤销

   tabModel->revertAll();

4.删除一行

    tabModel->removeRow(selModel->currentIndex().row());tabModel->submitAll();//提交修改

总结

使用QSqlRelationalTableModel ,来操作关系数据表的,增删改查,做好本表的字段与外键表的字段映射关系,通过该关系数据模型的submitAll()和revertAll()进行全部保存和全部撤销操作。

也可以自己创建代理类,来绑定字段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全球价值链贸易核算matlab程序(TIVA与WWZ分解方法大全)以及区域表链接方法

数据来源:基础数据来源于世界银行、国家统计局时间范围:2007年数据范围:国家与行业层面样例数据: 包含内容: 全部数据下载链接:https://download.csdn.net/download/samLi0620/89567902

Redis的操作以及SpringCache框架

目录 一.什么是Redis? 二.Redis的相关知识: 三.如何操作Redis? 1,常用命令: 2.Spring Data Redis (1) pom.xml 配置: (2)配置Redis数据源: …

麒麟V10安装nginx、mysql报错缺少包:error while loading shared libraries libssl.so.10

背景 启动nginx报错:error while loading shared libraries libssl.so.10 解决 查看nginx启动文件所依赖的动态链接库(即共享库或动态库) ldd nginx-1.22.1/sbin/nginx离线安装compat-openssl10包 将依赖包麒麟v10安装openssl10依赖包上…

QT6.6+Opencv 4.6.0完成摄像头显示以及捕获照片的功能

效果图提前展示,想试试再往下看: 在网上找了很久QT的摄像头打开方式,成功了,但是捕获照片一直不成功,我不知道是不是qt6版本的原因:这个多媒体窗口我安装没有效果 QT += multimediawidgets之前使用过python的opencv,于是想到可以使用opencv来显示摄像头以及捕获照片。…

C++完整的学生管理系统

实现功能 添加、删除、修改学生为学生添加、删除、修改成绩将数据保存在students.txt和grades.txt里 效果图&#xff08;部分功能&#xff09; 添加学生 添加成绩 源代码 这里就不分多个文件了 编译时在连接器命令行加入以下命令 -stdc11 #include <ios…

极客天成NVFile全闪存储加速千卡AIGC大模型训练平台

01 中国AI算力核心产业现状 随着人工智能技术的快速发展和广泛应用&#xff0c;AI算力已成为推动数字经济和科技创新的关键基础设施。2024年&#xff0c;中国AI算力核心产业规模持续扩大&#xff0c;在全球AI发展格局中占据重要地位&#xff0c;中国AI算力核心产业规模达到约…

LangChain的数据增强

吾名爱妃&#xff0c;性好静亦好动。好编程&#xff0c;常沉浸于代码之世界&#xff0c;思维纵横&#xff0c;力求逻辑之严密&#xff0c;算法之精妙。亦爱篮球&#xff0c;驰骋球场&#xff0c;尽享挥洒汗水之乐。且喜跑步&#xff0c;尤钟马拉松&#xff0c;长途奔袭&#xf…

Spring事务(1)

目录 一、事务回顾 1、什么是事务&#xff1f; 2、为什么需要事务&#xff1f; 3、事务的操作 二、Spring 中事务的实现 1、代码准备&#xff1a; &#xff08;1&#xff09;创建项目 spring-trans&#xff0c;引入 Spring Web&#xff0c;MyBatis&#xff0c;MySQL等依…

【C++】C++前言

目录 一.什么是C 1.1.面向过程&#xff1a; 1.2.面向对象&#xff1a; 二.C发展历史 三.C版本更迭 3.1.语法更新 3.2.关于C2X最新特性的讨论&#xff1a; 3.3.关于C23的一个小故事&#xff1a; 四.C参考文档&#xff1a; 五.C的重要性&#xff1a; 5.1.编程语言排行榜…

JESD204B学习与仿真

平台&#xff1a;vivado2018.3 芯片&#xff1a;xcku115-flva1517-2-i 场景&#xff1a;在高速ADC和DAC芯片中&#xff0c;有使用源同步的时钟和数据同步传输的方式&#xff0c;但是需要在逻辑内部对其进行校准。如果使用jesd204b接口传输数据&#xff0c;设计人员不需要了解…

《流程引擎原理与实践》开源电子书

流程引擎原理与实践 电子书地址&#xff1a;https://workflow-engine-book.shuwoom.com 第一部分&#xff1a;流程引擎基础 1 引言 1.1 流程引擎介绍 1.2 流程引擎技术的发展历程 1.3 相关产品国内外发展现状 1.4 本书的内容和结构安排 2 概念 2.1 基础概念 2.2 进阶…

MODBUS tcp学习总结

MODBUS TCP协议实例数据帧详细分析_modbus 帧结构-CSDN博客

Vuex看这一篇就够了

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

Win11 改造

记录一些安装 win11 系统之后&#xff0c;对使用不习惯的地方&#xff0c;进行的个人改造 右键菜单 Hiyoung006/Win11Useable: 将Win11右键菜单及资源管理器恢复为Win10样式的脚本 切换到旧版右键菜单&#xff1a; reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34…

什么是128陷阱?

Java包装类详解 Java包装类提供了一种将基本数据类型转换为对象的机制&#xff0c;这对于在需要对象而非基本数据类型的场景下尤为有用。本文将介绍拆装箱、包装类的编译器行为、常见方法以及自动装箱中的128陷阱。 拆装箱 拆装箱概念 拆箱&#xff08;Unboxing&#xff09…

iview中Checkbox组件设置不勾选是0,勾选是1

正常情况: <Checkbox v-model"data.blow" true-value"1" false-value"0"><span>是否易燃易爆</span> </Checkbox>vue的data中&#xff0c;将Checkbox绑定的初始值设置成0。 data: function () {return {data: {blow: &…

Web前端:HTML篇(二)元素属性

HTML 属性 属性是 HTML 元素提供的附加信息。 HTML 元素可以设置属性属性可以在元素中添加附加信息属性一般描述于开始标签属性总是以名称/值对的形式出现&#xff0c;比如&#xff1a;name"value"。 属性实例 HTML 链接由 <a> 标签定义。链接的地址在 href …

数据结构(二叉树-2)

文章目录 一、 实现链式结构二叉树 1.1 Tree.h 1.2 Tree.c 前中后序遍历 前序遍历 中序遍历 后续遍历 1.2 Tree.c 结点个数 1.3Tree.c 叶子节点个数 1.4 Tree.c 二叉树的高度 1.5 Tree.c 层序遍历 1.6 判断是否为完全二叉树 1.7 销毁二叉树 test.c 一、 实现链式结构二叉树 ⽤链…

体重电子秤方案pcba方案设计开发应用

体重电子秤是一种利用电子技术实现物体重量测量的设备。它是现代生活中不可缺少的日常用品之一。本文将从产品介绍、结构设计、工作原理、功能设计和特点优势五个方面来介绍体重电子秤方案产品。 首先&#xff0c;体重电子秤方案的产品介绍。 体重电子秤是一种便携式的设备&…

vue this.$refs 动态拼接

业务需要&#xff0c;refs是不固定的 <vxe-grid refgridWarehouse v-bind"gridWarehouseOptions" v-if"tableHeight" :height"tableHeight":expand-config"{iconOpen: vxe-icon-square-minus, iconClose: vxe-icon-square-plus}"c…