QSqlRelationalTableModel 关系表格模型

一、

1.1  QSqlRelationalTableModel继承自QSqlTableModel,并且对其进行了扩展,提供了对外键的支持。一个外键就是一个表中的一个字段 和 其他表中的主键字段之间的一对一的映射。例如,“studInfo”表中的departID字段对应的是“departments”表中的departID字段,那么就称字段departID是一个外键。因为这里的departID字段的值是一些数字,这样的显示很不友好,使用关系表格模型,就可以将它显示为“departments”表中的department字段的值。

1.2 使用“代码字段”的意义

1)major和department 字段,都是“汉字”:不仅 存储空间占用多,而且 “汉字可能会被修改”
2)如果使用“代码字段”标识:

            不仅占用空间小,而且 修改汉字,并不影响对应的 数值标识departID。
            如果不使用数值标识,每个表中都使用department的汉字。那么,每个表中的department汉字都要修改!

1.3

1)departments\majors表:专业代码字段departID\majorID 对应的数据表;
     studInfo表:具有(包含)代码字段departID\majorID的数据表;

2)QSqlRelationalTableModel类:专门用来编辑这种具有代码字段的数据表。(使用数值代码:标识汉字文字的字段)
使用QSqlRelationalTableModel作为tableView的数据源,显示和编辑studInfo数据表(具有代码字段);

二、

//打开数据表
    tabModel= new QSqlRelationalTableModel(this, DB);
    tabModel->setTable("studInfo"); //设置数据表studInfo
    tabModel->setEditStrategy(QSqlTableModel::OnManualSubmit);  //OnManualSubmit , OnRowChange
    tabModel->setSort(0,Qt::AscendingOrder);

    tabModel->setHeaderData(0,Qt::Horizontal,"学号");
    tabModel->setHeaderData(1,Qt::Horizontal,"姓名");
    tabModel->setHeaderData(2,Qt::Horizontal,"性别");
    tabModel->setHeaderData(3,Qt::Horizontal,"学院");
    tabModel->setHeaderData(4,Qt::Horizontal,"专业");

	//列号索引:从0开始,且不算隐藏列rowid列!

	//setRelation:在2个表之间建立关系!
    //设置代码字段的查询关系数据表
	//指定表"studInfo"的第3列是一个外键,将它映射为表"departments"的"departID"字段,并且视图应该在第3列显示"department"字段;
    tabModel->setRelation(3, QSqlRelation("departments","departID","department")); //学院
	//setRelation:在“studInfo”表 和 “majors”表之间建立关系
	//指定表"studInfo"的第4列是一个外键,将它和表"majors"的"majorID"字段建立映射关系,并且视图应该在第4列显示"major"字段
    tabModel->setRelation(4, QSqlRelation("majors","majorID","major"));//专业

    theSelection= new QItemSelectionModel(tabModel);
    connect(theSelection,SIGNAL(currentChanged(QModelIndex,QModelIndex)),
            this,SLOT(on_currentChanged(QModelIndex,QModelIndex)));

    ui->tableView->setModel(tabModel);//设置模型
    ui->tableView->setSelectionModel(theSelection);//设置选择模型
    ui->tableView->setItemDelegate(new QSqlRelationalDelegate(ui->tableView)); //为关系型字段设置缺省代理组件

//setRelation:在2个表之间建立关系!设置代码字段的查询关系数据表;
//指定表"studInfo"的第3列(departID)是一个外键,将它映射为表"departments"的"departID"字段,并且视图应该在第3列显示"department"字段;

 tabModel->setRelation(3, QSqlRelation("departments","departID","department")); //学院

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SpringCloud】使用OpenFeign进行微服务化改造

目录 一、需求与背景二、OpenFeign 远程调用技术原理三、项目代码演示3.1 引入依赖3.2 实现OpenFeign注解修饰接口3.3 指定 OpenFeign 远程调用接口的扫描路径 四、OpenFeign 在日志中打印Request和Response五、OpenFeign 客户端超时配置六、使用 OpenFeign 实现服务降级6.1 实…

【python】OpenCV—Tracking(10.1)

学习来自《Learning OpenCV 3 Computer Vision with Python》Second Edition by Joe Minichino and Joseph Howse 文章目录 检测移动的目标涉及到的 opencv 库cv2.GaussianBlurcv2.absdiffcv2.thresholdcv2.dilatecv2.getStructuringElementcv2.findContourscv2.contourAreacv2…

STM32 IIC电量计LTC2944

1 描述 LTC2944 可在便携式产品应用中测量电池充电状态、电池电压、电池电流及其自身温度。宽输入电压范围允许使用高达 60V 的多节电池。精密库仑反向积分电流通过电池正极端子与负载或充电器之间的检测电阻器。 电压、电流和温度由内部 14 位无延迟 ΔΣ™ ADC 测量。测量结…

09-信息收集-APP及其他资产等

信息收集-APP及其他资产等 信息收集-APP及其他资产等一、APP提取季抓包及后续配合1、某APK一键提取反编译2、利用bp抓取更多URL 二、某IP无web框架下的第三方测试1、各种端口一顿乱扫 —— 思路2、各种接口一顿乱扫 —— 思路3、接口部分一顿测试 —— 思路 三、**案例演示**1、…

KubeSphere 社区双周报|Fluent Bit 升级到 v2.2.2|2024.01.18-02.01

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2024.01.18-02.01…

新加坡大带宽服务器优势特点

随着互联网技术的不断进步,大带宽服务器在满足高速数据传输需求方面发挥着越来越重要的作用。新加坡,作为全球互联网基础设施的重要枢纽,其大带宽服务器在全球范围内备受关注。本文将深入探讨新加坡大带宽服务器的优势特点,以及如…

【Python基础】Numpy使用指南

文章目录 Numpy使用指南1 numpy简介2 numpy安装3 ndarray3.1 ndarry轴与秩3.2 ndarray 相关属性3.3 创建 ndarray 对象3.4 np.radom相关方法3.5 reshape方法3.6 ndarray对象转其他数据结构 4 numpy的数据类型5 numpy访问与修改5.1 一维array5.2 numpy中的轴 6 numpy计算6.1 基本…

Methodot低代码实战教程(一)——熟悉可视化Echart组件

一、产品介绍: Methodot是行云创新旗下一款面向研发使用的一站式云原生开发及应用托管平台,产品内有大量开箱即用的服务和开发工具,例如: 支持开发团队进行微服务架构设计(例如一个袜子商店管理系统)&…

病原菌共感染研究思路

近年来,多微生物共感染在临床上的报道日益增多。其中,多细菌共感染占据了细菌感染的25% ,其发病率和严重性也相应增加。尤其在形成生物膜后,这种共感染对疾病的发生、发展和临床治疗生重要影响,同时也给临床治疗带来了更大的挑战。 随着测序的发展,应用高通量转录组…

Java黑马——拼图小游戏

拼图小游戏(GUI) AWT包会有些兼容问题,不支持某些中文 在本次游戏的GUI开发中,我们将使用Swing包 一、主界面分析 这些东西统一称为组件,JFrame是一个组件、JMenuBar也是一个组件、等等 1、练习一:创建主…

离线生成双语字幕,一键生成中英双语字幕,基于AI大模型,ModelScope

离线生成双语字幕整合包,一键生成中英双语字幕,基于AI大模型 制作双语字幕的方案网上有很多,林林总总,不一而足。制作双语字幕的原理也极其简单,无非就是人声背景音分离、语音转文字、文字翻译,最后就是字幕文件的合并&#xff0c…

AI大模型开发架构设计(7)——人人都需要掌握的AI编程及应用案例实战

文章目录 人人都需要掌握的AI编程及应用案例实战1 AI代码生成模型与AI编程助手介绍程序设计方式的发展自动代码生成AI编程工具 2 AI编程助手的代码生成模型架构剖析以 CodeGeeX 为例-发展过程以 CodeGeeX 为例-训练过程以 CodeGeeX 为例-大规模代码数据处理以 CodeGeeX 为例-模…

消息中间件特性

一:消息队列的主要作用是什么? 1.消息队列的特性: 业务无关,一个具有普适性质的消息队列组件不需要考虑上层的业务模型,只做好消息的分发就可以了,上层业务的不同模块反而需要依赖消息队列所定义的规范进行…

Base64编码原理

Base64编码原理非常简单,首先确定好要编码的字符串,并查找其对应的 ASCII码将其转换为二进制表示,每三个8位的字节转换为四个6位的字节 (384 624),把6位的最高位添两位数字0 ,组成四个8位的字节…

内裤洗衣机有用吗?口碑好的小型洗衣机推荐

随着内衣洗衣机的流行,很多小伙伴在纠结该不该入手一款内衣洗衣机,专门来洗一些贴身衣物,答案是非常有必要的,因为我们现在市面上的大型洗衣机只能做清洁,无法对我们的贴身衣物进行一个高强度的清洁,而小小…

前端JavaScript篇之let、const、var的区别

目录 let、const、var的区别 let、const、var的区别 let、const和var是JavaScript中用于声明变量的关键字,它们之间有一些区别。 首先,var是在ES5中引入的关键字,而let和const是在ES6中引入的。在ES6之前,我们只能使用var来声明…

基于STM32F103C8T6最小系统板(对标某淘)

原理图和PCB都和某淘购买一样!!! 原理图 PCB 3D图

炒股操作方法!南通怎么开股票账户佣金最低?炒股交易手续费最低?

炒股操作方法可以有很多种,以下是一些建议:这些是一些股票交易技巧,希望对你有帮助。请记住,投资有风险,决策请谨慎。 设定明确的投资目标:确定你的投资目标,是为了长期投资还是短期交易&#x…

BGP按组打包

按组打包技术将所有拥有共同出口策略的BGP邻居当作是一个打包组 每条待发送路由只被打包一次然后发给组内的所有邻居 RR1发给三个Client,需要发三份路由。 通过按组打包,可以将路由打包,一次发给所有组内的邻居(前提是出口策略相…

【数据分享】1929-2023年全球站点的逐年最高气温数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,其中又以气温指标最为常用!说到气温数据,最详细的气温数据是具体到气象监测站点的气温数据! 之前我们分享过1929-2023年全球气象站…