QSqlRelationalTableModel 增删改查

news2024/9/23 6:38:15

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.coloradmin.cn/o/1943013.html

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

相关文章

5G赋能新能源,工业5G路由器实现充电桩远程高效管理

随着5G技术的广泛应用,新能源充电桩的5G应用正逐步构建起全新的生态系统。在数字化转型的浪潮中,新能源充电桩行业正迎来数字化改革。工业5G路由器的引入,为充电桩的远程管理提供了强有力的技术支持,新能源充电桩5G路由器网络部署…

Linux系统编程__进程学习1

文章目录 进程相关概念进程创建实战fork函数创建进程vfork创建进程子进程退出等待子进程孤儿进程 进程相关概念 一、什么是程序,什么是进程,有什么区别? 程序是静态的概念,gcc xxx.c –o pro 磁盘中生成pro文件,叫做程…

基于vue3 + vite产生的 TypeError: Failed to fetch dynamically imported module

具体参考这篇衔接: Vue3报错:Failed to fetch dynamically imported module-CSDN博客 反正挺扯淡的,错误来源于基于ry-vue-plus来进行二次开发的时候遇到的问题。 错误起因 我创建了一个广告管理页面。然后发现访问一直在加载中。报的是这样…

如何一键群发所有好友?

登录系统后,累计在线时间超过 48小时再进行群发。 第一步:选择联系人 点击群发助手下群发设置,在左侧选择微信号后,然后选择微信号下的微信好友/群,选择完成后,点击下一步按钮。 第二步:设定群…

C++ | Leetcode C++题解之第273题整数转换英文表示

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<string> singles {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Ni…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十四章 注册字符设备号

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

Linux学习第55天:Linux 4G 通信实验(更快、更高、更强)

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 无论是有线网络还是WiFi都是摆脱不了布线的尴尬&#xff0c;而4G通信可以彻底拜托网线的束缚&#xff0c;实现无线网络通信。 而说到4G就不得不提到5G&#xff0c;中…

Requestium:一个将Requests和Selenium无缝衔接的爆款工具

2024软件测试面试刷题&#xff0c;这个小程序&#xff08;永久刷题&#xff09;&#xff0c;靠它快速找到工作了&#xff01;&#xff08;刷题APP的天花板&#xff09;-CSDN博客文章浏览阅读2.1k次&#xff0c;点赞85次&#xff0c;收藏11次。你知不知道有这么一个软件测试面试…

全国区块链职业技能大赛国赛考题区块链产品需求分析与方案设计

任务1-1:区块链产品需求分析与方案设计 本任务需要依据项目背景完成需求分析与方案设计,具体要求如下: 依据给定区块链食品溯源系统的业务架构图,对考题进行业务分析,尽可能多的去考虑一个业务系统所需要的模块,使用Visio或思维导图工具展现本系统的基本设计概念和处理流…

python函数中如何修改全局变量

所谓全局变量&#xff0c;其实就是相对于局部变量而说的。全局变量是定义在整个文件层次上的&#xff0c;可以在文件内的任何地方被访问&#xff0c;包括函数内部。 DEFAULT_DB_NAME "ss" def get_connection():print(DEFAULT_DB_NAME) if __name__ __main__:get_c…

C++ —— 关于模板初阶

1.什么是模板 在C中&#xff0c;模板&#xff08;template&#xff09;是一种通用的编程工具&#xff0c;允许程序员编写通用代码以处理多种数据型或数据结构&#xff0c;而不需要为每种特定类型编写重复的代码&#xff0c;通过模板&#xff0c;可以实现代码的复用和泛化提高代…

Python GUI Maker:拖拽式生成Tkinter GUI 界面的设计工具,让Tkinter开发变得专业高效

简介 Python 是一门极其流行和强大的编程语言,其简洁优雅的语法以及丰富的标准库和第三方库,使其在各个领域都广受欢迎。其中,Tkinter 是 Python 内置的图形用户界面(GUI)库,是构建 Python GUI 应用程序的事实标准。Tkinter 提供了创建窗口、添加控件、处理事件等基本功能,但对…

SQL 简单查询

目录 一、投影查询 1、指定特定列查询 2、修改返回列名查询 3、计算值查询 二、选择查询 1、使用关系表达式 2、使用逻辑表达式 3、使用 BETWEEN关键字 4、使用 IN关键字 5、使用 LIKE关键字 6、使用 IS NULL/ NOT NULL关键字 7、符合条件查询 三、聚合函数查询 一…

深度学习 —— 个人学习笔记6(权重衰减)

声明 本文章为个人学习使用&#xff0c;版面观感若有不适请谅解&#xff0c;文中知识仅代表个人观点&#xff0c;若出现错误&#xff0c;欢迎各位批评指正。 十三、权重衰减 使用以下公式为例做演示&#xff1a; y 0.05 ∑ i 1 d 0.01 x i ε w h e r e ε &#xff5e; N…

勇闯高龄“禁区”,四川眼科医院成功为95岁高龄老人实施泪道手术

一吹风就流泪、眼角总有擦不干净的分泌物……很多人以为这只是个滴眼药就能解决的小问题。其实不然&#xff0c;“不起眼”的疾病发展严重时可能还会需要手术治疗。 近日&#xff0c;四川眼科接诊了一位眼泪汪汪的耄耋老人张奶奶&#xff08;化名&#xff09;&#xff0c;此次…

vue2 使用代码编辑器插件 vue-codemirror

vue 使用代码编辑器插件 vue-codemirror 之前用过一次&#xff0c;当时用的一知半解的&#xff0c;所以也没有成文&#xff0c;前几天又因为项目有需求&#xff0c;所以说有用了一次&#xff0c;当然&#xff0c;依旧是一知半解&#xff0c;但是还是稍微写一下子吧&#xff01;…

学习测试10-4自动化 web自动化

网页资源 链接: https://pan.baidu.com/s/17XL2c2lkw_R6BD–VnOQqw?pwd43dr 提取码: 43dr 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 框架之间切换 driver.switch_to.frame("idframe1") # 父切子 参数用id和name# 子切子必须先转回父 driver.sw…

数据分析:微生物数据的荟萃分析框架

介绍 Meta-analysis of fecal metagenomes reveals global microbial signatures that are specific for colorectal cancer提供了一种荟萃分析的框架&#xff0c;它主要基于常用的Wilcoxon rank-sum test和Blocked Wilcoxon rank-sum test 方法计算显著性&#xff0c;再使用分…

STM32自己从零开始实操10:PCB全过程

一、PCB总体分布 分布主要参考有&#xff1a; 方便供电布线。方便布信号线。方便接口。人体工学。 以下只能让大家看到各个模块大致分布在板子的哪一块&#xff0c;只能说每个人画都有自己的理由&#xff0c;我的理由如下。 还有很多没有表达出来的东西&#xff0c;我也不知…

Python和MATLAB网络尺度结构和幂律度大型图生成式模型算法

&#x1f3af;要点 &#x1f3af;算法随机图模型数学概率 | &#x1f3af;图预期度序列数学定义 | &#x1f3af;生成具有任意指数的大型幂律网络&#xff0c;数学计算幂律指数和平均度 | &#x1f3af;随机图分析中巨型连接分量数学理论和推论 | &#x1f3af;生成式多层网络…