Qt扫盲-QSqlRelationalTableModel 理论总结

news2024/11/24 20:10:10

QSqlRelationalTableModel 理论总结

  • 一、概述
  • 二、使用概述
  • 三、常用

一、概述

QSqlRelationalTableModel的行为类似于QSqlTableModel,但允许将列设置为进入其他数据库表的外键。
在这里插入图片描述

二、使用概述

在上面左边的截图显示了 QTableView 中的普通 QSqlTableModel。外键(city和country)不能解析为人类可读的值。右边的截图显示了一个QSqlRelationalTableModel,外键被解析为人类可读的文本字符串。

下列代码片段展示了如何设置QSqlRelationalTableModel:

model->setTable("employee");

model->setRelation(2, QSqlRelation("city", "id", "name"));
model->setRelation(3, QSqlRelation("country", "id", "name"));

setRelation() 函数调用建立了两个表之间的关系。第一个调用指定表 employee 中的 列2 是一个外键,它与表 city 的字段 id 相映射,并且视图应该向用户显示城市的 name 字段。第二个调用对列3做了类似的处理。这个类还可以设置连接关系,默认是 inner join,我们也可以手动设置为 left join。

如果你使用读写QSqlRelationalTableModel,你可能想在视图上使用QSqlRelationalDelegate。与默认委托不同,QSqlRelationalDelegate 为作为其他表的外键的字段提供了一个组合框。要使用这个类,只需在视图上调用QAbstractItemView::setItemDelegate(),并传入一个QSqlRelationalDelegate的实例,这个QSqlRelationalDelegate 会自动的生成一个Combox 下拉框以便我们修改:

std::unique_ptr<QTableView> view{new QTableView};
view->setModel(model);
view->setItemDelegate(new QSqlRelationalDelegate(view.get()));

relationaltablemodel示例演示了如何使用QSqlRelationalTableModel和QSqlRelationalDelegate来为表提供外键支持。
在这里插入图片描述
使用这个类的前提是对数据库表是有约束的

注意:

  • 一个表表必须声明一个主键。

  • 一个表的主键不能包含与另一个表的关系。

  • 如果关系表包含引用引用表中不存在行的键,则包含无效键的行将不会通过模型暴露。用户或数据库负责保持引用完整性。

  • 如果一个关系的显示列名在关系表中也用作列名,或者如果它在多个关系中用作显示列名,那么它将是别名。别名是关系的表名、显示列名和一个由下划线连接的唯一id(例如tablename_columnname_id)。QSqlRecord::fieldName()将返回别名列名。当检测到重复的列名时,所有重复的显示列名都会有别名,但在主表中的列名不会有别名。别名不会影响QSqlRelation,因此QSqlRelation::displayColumn()将返回原始的显示列名。

  • 引用表名有别名。别名是单词“relTblAl”和由下划线连接的相关列索引(例如relTblAl_2)。别名可以用来过滤表(例如,setFilter(“relTblAl_2='Oslo’或relTblAl_3=‘USA’”))。

  • 使用setData()时,角色应该始终是Qt::EditRole,使用data()时,角色应该始终是Qt::DisplayRole。
    这个就是一种 model/view 编程的约束条件而已

三、常用

因为这个类是继承至 QSqlTableModel 类的,所以 QSqlTableModel 具有的增删改查的功能是和这个类的完全一致的,去看看QSqlTableModel 是如何使用的变能照猫画虎啦。

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

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

相关文章

Unity如何生成随机数(设置种子)

文章目录 随机类整数二维向量三维向量种子其他文章 随机类 我们可以使用Random类来生成一些随机数 Random类是Unity提供的用于生成随机数的类之一。它可以用于生成不同类型的随机数&#xff0c;如整数、浮点数和向量。 整数 我们可以使用Random.Range来生成指定范围内的随机…

【Verilog 教程】6.5 Verilog避免Latch

关键词&#xff1a;触发器&#xff0c;锁存器 Latch 的含义 锁存器&#xff08;Latch&#xff09;&#xff0c;是电平触发的存储单元&#xff0c;数据存储的动作取决于输入时钟&#xff08;或者使能&#xff09;信号的电平值。仅当锁存器处于使能状态时&#xff0c;输出才会随着…

虹科Pico汽车示波器诚邀您加入精准诊断时代,助您成为修车大师!

虹科Pico汽车示波器的口号是&#xff1a; 面向未来诊断&#xff0c;定义精准时代 淘汰人的是工具从来不是年龄&#xff01;虹科Pico汽车示波器能够让您掌握现代的诊断工具&#xff0c;让您更高效的诊断故障原因。 我们有专业的设备与优质的技术服务&#xff01;让每个用户自…

卷麻了,00后测试用例写的比我还好,简直无地自容。。。

前言 作为一个测试新人&#xff0c;刚开始接触测试&#xff0c;对于怎么写测试用例很头疼&#xff0c;无法接触需求&#xff0c;只能根据站在用户的角度去做测试&#xff0c;但是这样情况会导致不能全方位的测试APP&#xff0c;这种情况就需要一份测试用例了&#xff0c;但是不…

Cruise 从零搭建模型

第一步&#xff0c;新建一个project&#xff1a; 下面添加version&#xff1a; 将该新建的task加载进来&#xff0c;然后保存&#xff1a; 保存完之后&#xff0c;文件夹内多了很多内容&#xff1a; 可以看出&#xff0c;用这种方法&#xff0c;只能建立两层文件夹&#xff0c;…

LeetCode —— 回溯

77. 组合 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 示例&#xff1a;输入&#xff1a;n 4, k 2 输出&#xff1a; [ [1,2], [1,3], [1,4], [2,3], [2,4], [3,4]] class Solution {List<List<Integer>> list new…

【面试经典150 | 数组】H 指数

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;排序方法二&#xff1a;二分方法三&#xff1a;计数排序 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&am…

java-普通项目中多个模块间的引用

背景&#xff1a; 项目下面有一个common的模块&#xff0c;其他模块引用 现象&#xff1a; 当class文件直接在src下面的时候 其他模块引用解析不了 当class文件在allUtils的时候是可以解析的

外包公司干了2个月,整个人不思进取了...

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入深圳某软件公司&#xff0c;干了接近3年的功能测试&#xff0c;今年8月份&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了三年的功能测试…

我用PYQT5做的第一个实用的上位机项目(二)

从这篇开始&#xff0c;复盘整个的过程&#xff0c;做一个记录。 首先&#xff0c;制作一些自定义的常用部件&#xff0c;原生的部件很粗糙。 一、按钮的图片资源&#xff1a;用绘图软件&#xff08;例如AI、coreldraw、PS等&#xff0c;看自己的熟悉程度&#xff09;制作按钮…

泰国数字加密平台Bitkub创始人到访和数集团:以数字化创新探索科技前沿密码

9月21日&#xff0c;泰国数字加密货币交易平台Bitkub创始人兼首席执行官&#xff08;CEO&#xff09;Jirayut Srupsrisopa (Topp)先生到访上海和数集团&#xff0c;在和数集团董事长唐毅陪同下实地参观了和数集团上海总部&#xff0c;听取了和数集团在引领前沿数字化创新&#…

怒刷LeetCode的第18天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一&#xff1a;置换 方法二&#xff1a;哈希集合 方法三&#xff1a;递归 第二题 题目来源 题目内容 解决方法 方法一&#xff1a;双指针法 方法二&#xff1a;动态规划 方法三&#xff1a;栈 方法四&#xff1a;两…

数字乡村包括哪些方面?数字乡村应用介绍

数字乡村是指利用物联网、数字化和智能化技术&#xff0c;借助现代数字智能产品、高效信息服务和物联网基础设施&#xff0c;以提高农村居民生活质量&#xff0c;助力拓展经济发展前景。 创建数字村庄有助于缩小城乡社区之间的差距&#xff0c;保障每个人都能平等地享受科技发展…

LabVIEW开发低成本静脉监测和控制输液系统

LabVIEW开发低成本静脉监测和控制输液系统 信息技术的使用和进步彻底改变了现代医疗保健的面貌。医院、疗养院和其他姑息治疗院需要不同的人力资源&#xff0c;如医生、技术人员、护士和其他工作人员&#xff0c;他们共同提供最先进的医疗保健。COVID-19大流行表现出严重缺乏此…

安全厂商安恒信息加入龙蜥社区,完成 与 Anolis OS 兼容适配

近日&#xff0c;杭州安恒信息技术股份有限公司&#xff08;以下简称“安恒信息”&#xff09;签署了 CLA&#xff08;Contributor License Agreement&#xff0c;贡献者许可协议&#xff09;&#xff0c;正式加入龙蜥社区&#xff08;OpenAnolis&#xff09;&#xff0c;并成为…

2023-9-27 JZ77 按之字型顺序打印二叉树

题目链接&#xff1a;按之字型顺序打印二叉树 import java.util.*;/** public class TreeNode {* int val 0;* TreeNode left null;* TreeNode right null;* public TreeNode(int val) {* this.val val;* }* }*/public class Solution {/*** 代码中的类名、方…

阿里云服务器企业级独享和共享型有什么区别?

阿里云ECS云服务器共享型和企业级有什么区别&#xff1f;企业级就是独享型&#xff0c;共享型和企业级云的主要区别CPU调度模式&#xff0c;共享型是非绑定CPU调度模式&#xff0c;企业级是固定CPU调度模式&#xff0c;共享型云服务器在高负载时计算性能可能出现波动不稳定&…

恋爱聊天追女神沟通话术小程序开发演示

现在什么最有市场&#xff1f;婚恋、交友、恋爱…… 单身多需求就自然而然的产生了&#xff0c;而且还很大。我们可以搜素查看各平台这类项目的流量&#xff0c;基本都不低。 因此针对细分领域开发两款恋爱聊天沟通话术小程序&#xff0c;一款为本地数据版&#xff0c;一款为…

携手华为使能全场景创新,夯实算力底座,麒麟信安受邀参加华为全联接大会2023

智能化浪潮正奔腾而来&#xff0c;驱动千行百业锚定新航向、跑出加速度。日前&#xff0c;第八届华为全联接大会&#xff08;HUAWEI CONNECT 2023&#xff09;在上海举办。大会邀请思想领袖、商业精英、技术专家、合作伙伴、开发者等业界同仁&#xff0c;从商业、产业、生态等方…

设计模式1、单例模式 Singleton

解释说明&#xff1a;确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问这个唯一实例 要点如下 有且仅有一个实例 必须自行创建自己的唯一实例 必须给所有其他对象提供这一实例 具体实现要点如下 提供一个 private 构造函数&#xff08;防止外部调用而构造类的实例…