QT使用数据库QSqlRelationTableModel显示模型(外键显示)

关于Qt使用SQL模型类数据修改后不能写入数据库的问题 最近一直在做ARM下的Qt程序,数据库方面也是使用了QSqlRelationTableModel类,已表格形式显示数据库中的某一个表格。 一切仿佛都很好,一点儿问题都没有。 但是用了好几款板子才发现在表格中修改数据后不能存到数据库中去,完蛋了!!!! 上网海搜,各种问这个问题的帖子,找到了一篇帖子说Qt自带的数据库不能解决这个问题,需要编译安装SQLITE3。这个方法我没有验证 后来在各种 阅读详情

1. 打开数据库,建一个city表,插入数据,如图:

我只用了id integer primar key auto_increment.

2. QT新建一个不带ui的项目,连接数据库

QSqlDatabase db;
db = QSqlDatabase::addDatabase("QMYSQL");//选择连接类型
db.setHostName("localhost");//设置设备名
db.setDatabaseName("Learn_References");//连接库名
db.setPort(3306);//设置端口 默认为3306
db.setUserName("root");//登录用户名
db.setPassword("1111");//用户名密码
if(!db.open())//打开失败返回错误窗口
    QMessageBox::warning(this,"",db.lastError().text());

3. 创建一个student表,字段(id、name、age、address),并设置address为city表id的外键。

QSqlQuery query;
if(!query.exec("create table student("
               "id integer primary key auto_increment,"
               "name varchar(20),"
               "age integer,"
               "address integer,"
               "foreign key(address) references city(id)"
               ")"))
    QMessageBox::warning(this,"",query.lastError().text());

4. 插入数据

insert into student (name, age, address) values ('AAA', 20, 2);
insert into student (name, age, address) values ('BBB', 25, 1);
insert into student (name, age, address) values ('CCC', 22, 4);
insert into student (name, age, address) values ('DDD', 23, 5);
... ...

5. 使用QSqlTableModel显示数据

QSqlTableModel * model = new QSqlTableModel(this,db);
model->setTable("student");
model->select();

这样执行成果是这样的:

6. 可以发现,其中address栏是我们插入的数字,那么与city表中的cityname连接则需要使用QSqlRelationalTableModel。

QSqlRelationalTableModel * model = new QSqlRelationalTableModel(this);
model->setTable("student");
model->setRelation(3,QSqlRelation("city","id","cityname"));

解释下model->setRelation(3,QSqlRelation("city","id","cityname"));

3 是使用外键的列号
QSqlRelation原型:
	QSqlRelation(const QString &aTableName, const QString &indexCol,const QString &displayCol)
所以可以理解为(关联_表名,关联外键_字段,替换_字段)

执行后是这样的

!!!注意!!!
如果你用的是mysql,那么直接可以使用。如果你用的是sqlite,需要执行query.exec("pragma foreign_keys = on");开启外键功能。

  • 界面构造函数中全部代码
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
	//连接数据库
    QSqlDatabase db;
    db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("Learn_References");
    db.setPort(3306);
    db.setUserName("root");
    db.setPassword("1111");
    if(!db.open())
        QMessageBox::warning(this,"",db.lastError().text());

//	创建student表
//    QSqlQuery query;
//    if(!query.exec("create table City("
//                   "id integer primary key auto_increment,"
//                   "name varchar(20),"
//                   "age integer,"
//                   "address integer),"
//                   "foreign key(address) references city(name)"
//                   ")"))
//        QMessageBox::warning(this,"",query.lastError().text());

//        if(!query.exec("insert into student (name,age,address) values('AAA',21,5)"))
//            QMessageBox::warning(this,"",query.lastError().text());
    
//常规显示
//    QSqlTableModel * model = new QSqlTableModel(this,db);
//    model->setTable("student");

//QSqlRelationalTableModel显示
        QSqlRelationalTableModel * model = new QSqlRelationalTableModel(this);
        model->setTable("student");
        model->setRelation(3,QSqlRelation("city","id","cityname"));

//显示
        QTableView * view = new QTableView(this);
        view->setModel(model);
        model->select();
        setCentralWidget(view);
}
QT读书笔记— QSqlTabelModel类及QSqlRelationTabelModel类 1、QSqlTabelModel类SQL表格模型 QT QSqlTabelModel提供了一个一次只能操作一个SQL表的读/写模型,它是QSqlQuery的更高层次的替代品,可以浏览和修改独立的SQL表,只需编写很少的代码,而且不需要了解SQL语法。该模型默认是可读/写的,如果想让其成为只读模型,那么可以从视图进行设置, view->setEidtTriggers(QAbstractItem... 阅读详情

相关推荐

qt QSqlRelationalTableModel 详解

用户接口层 用户接口层的几个类实现将数据库中的数据链接到窗口部件上,这些类是使用模型/视图框架实现的,他们是更高层次的抽象,主要包括QSqlQureyModel,QSqlRelationalTableModel为QSqlTableModel 的子类,为单张的数据库表提供了一个可编辑的数据模型,它。: 编辑一个数据表,将代码字段通过关系与代码表关联,将代码字段的编辑转换为直观的内容选择编辑。: 直接设置一个数据表的名称,可以获取数据表的全部记录,结果是可编辑的。主表的代码字段的序号。

baidu_16370559的博客 1404

SQL的模型类

Qt中SQL的显示模型

qq_45303986的博客 812

如何利用东南大学齿轮箱数据集进行故障诊断?从数据采集到模型训练全流程解析

本文详细解析如何利用东南大学齿轮箱数据集进行故障诊断,涵盖从数据采集到模型训练的全流程。通过信号预处理、特征工程构建及多种机器学习模型对比,帮助开发者高效实现工业设备健康管理。特别适合希望将AI技术应用于工业场景的Python开发者。

m2n3b4v5c6的博客 377

Qt SQL:QSqlRelation、QSqlRelationalTableModel、QSqlRelationalDelegate

Qt SQL:QSqlRelation、QSqlRelationalTableModel、QSqlRelationalDelegate

友善啊,朋友的博客 1397

高效IT运维报告编写指南:实战经验与模板分享

本文提供了一份全面的IT运维报告编写指南,涵盖实战经验与实用模板分享。文章详细解析了高效运维报告的核心要素,包括结构设计、数据收集自动化和可视化技巧,并提供了月度报告和故障分析报告模板。通过自动化工具和写作技巧,帮助团队提升报告质量,支持决策和问题追踪。

u5v6w7的博客 927

电池管理系统(BMS)系列—状态估计之SOH

BMS系列文章,介绍了SOH估计

zxx52113140的博客 1846

Qt-数据库开发-外键使用(4)

1. 本示例展示了如何使用QSqlRelationalTableModel(关系表模型)来可视化数据库中[外键]的使用。 2. 程序启动时自动创建一个数据库,并创建一个主表个两个从表,可选择创建文件数据还是内存数据库; 3. 通过主表中的【外键】去关联子表中的数据; 4. 只有一个main.cpp,十分简单便于学习。

mahuifa的博客 2014

【多媒体交互】Unity+普通摄像头实现UI事件分析

利用摄像头捕捉用户的手势或动作,结合坐标映射与事件系统触发UI交互

qq_38350004的博客 1318

qt数据库外键查询

qt数据库外键查询 最近,开发qt数据库方面的信息管理系统,使用到了sqlite数据库,涉及到了外键查询。 查找了几个文章,没有找到合适的解决方案,阅读QSqlRelationalTableModel帮助文档,没有看懂其使用方法。 最后在 这篇文章中 找到些查询方法。 具体的做法见下面代码: QSqlRelationalTableModel *sqlModel; //设置外键 sqlModel->setRelation( "resume", "id", "education" ); QString

dongh_bfwm的博客 1138

IB网络下不同租户业务隔离方案

IB(InfiniBand)网络隔离可以在不同的通信模式下实现,其中包括 IPoIB(IP over InfiniBand)通信模式。在 IPoIB 模式下,InfiniBand 网络可以承载 IP 数据包,使得基于 IP 的应用程序能够在 InfiniBand 网络上进行通信。在这种情况下,IB 网络隔离通常指通过配置 Partition Key(PKey)来实现不同的租户或应用程序之间的网络隔离。然而,IB 网络隔离并不仅限于 IPoIB 模式。

guganly的专栏 1527

前端监控体系:从Sentry到LogRocket错误追踪

Sentry是一款开源的实时错误追踪系统,支持多种语言和框架,包括JavaScript、React、Vue等。它提供了丰富的错误信息、堆栈跟踪和环境数据,帮助开发者快速定位和解决问题。LogRocket是一款前端监控和用户行为分析工具,它提供了视频回放、性能监控、错误追踪等功能。与Sentry不同,LogRocket更注重用户行为的全面分析。前端监控体系是确保应用稳定性和用户体验的重要保障。通过集成Sentry和LogRocket等监控工具,开发者可以实时追踪应用中的错误和用户行为,快速定位和解决问题。

shejizuopin的博客 1314

【Qt之QSqlRelationalTableModel】描述及使用

【Qt之QSqlRelationalTableModel】描述及使用

FreeLikeTheWind的博客 1772

智能车竞赛走马观碑组:如何高效识别目标板并优化绕行策略(附实战代码)

本文深入探讨了智能车竞赛走马观碑组中,如何构建从图像识别到路径决策的全栈优化方案。针对目标板识别与绕行策略的核心难点,文章详细解析了基于MobileNetV2的高效识别流水线、结合预瞄点与纯追踪算法的平滑路径规划,以及横向与纵向协同控制策略,并提供了实战代码与调试指南,旨在全面提升小车的比赛表现。

o5p6q的博客 884

QSqlRelationTableModel使用示例

QSqlRelationTableModel使用示例

liji_digital的博客 998

全志F1C100S/F1C200S学习笔记(11)——spi-flash 启动全流程适配烧录及踩坑指南

SPI Flash 系统编译 spi-flash 启动适配 分区规划: 分区序号 分区大小 分区作用 地址空间及分区名 mtd0 1MB (0x100000) spl+uboot 0x0000000-0x0100000 : “uboot” mtd1 64KB (0x10000) dtb文件 0x0100000-0x0110000 : “dtb” mtd2 4MB (0x400000) linux内核 0x0110000-0x0510000 : “kernel” mtd3 剩余 (

丨晋丨 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Qt数据库:(七)QSqlRelationalTableModel

讲完QSqlTableModel了,我们这次讲这个类的扩展类QSqlRelationalTableModel,它们没有太大的不同,唯一的就是后者在前者的基础之上添加了外键(或者叫外码)的支持。 QSqlRelationalTableModel,该类为单张的数据库表提供了一个可编辑的数据模型,它支持外键。 我们还是新建Qt4 Gui Application工程,我这里工程名为relational

Suger Mike的博客 5648

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

QT之QTreeView使用总结

1、在UI界面中拖TreeView控件进UI界面。 2、一般Qt中使用model来管理数据与视图的关系,使用delegate重写point()处理UI效果。 一、model QT提供了一些现成的models用于处理数据项: QStringListModel 用于存储简单的QString列表。 QStandardItemModel 管理复杂的树型结构数据项,每项都可以包含任意数据。 QDirModel提供本地文件系统中的文件与目录信息。 QSqlQueryModel,QSqlTableModel,QSql

Linux柒匠心 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Qt连接Mysql

QT连接Mysql使用

qq_54468377的博客 489

QT数据库

QSqlQuery执行底层数据库支持的SQL语句。 QSqlRelationTableModel类是对QSqlTableModel类的扩展,它提供了对外键的支持。可以很容易地实现数据库中的主从视图模式。

677

QT笔记:数据库总结(四)之SQL模型类-QSqlRelationalTableModel模型

该类为单张的数据库表提供了一个可编辑的数据模型,它支持外键,除此之外和QSqlTableModel没有什么不同 model = new QSqlRelationalTableModel(this); model->setEditStrategy(QSqlTableModel::OnFieldChange); //属性变化时写入数据库 model->setTable("student");

再生的雄赢专栏 6939

Qt 数据库总结

一边做项目,一边学习Qt对于数据库的操作,主要教程来自Qt的论坛http://www.qter.org/portal.php?mod=view&aid=58,该教程主要是介绍Qt的query和model,以及相关的index和view,没有特别的内容,我的建议还是读一下关于数据库理论的书,这个操作比较简单 我一边说操作简单,但是它的安装真的很让人恼火,我之前总结了一下,有兴趣的可以看一下...

zhouzhouasishuijiao的博客 296

Qt - 模型/视图编程(MVC编程-标准模型项)

模型/视图编程 MVC编程-标准模型项 Qt中的模型/视图架构用来实现大量的数据存储、处理及显示。MVC(Model-View-Controller)包括了3个组件:模型(Model)是应用对象,用来表示数据;视图(View)是模型的用户界面,用来显示数据;控制(Controller)定义了用户界面对用户输入的反应方式。委托(Delegate)用于定制数据的渲染和编辑方式。 1.模型 所有的模型都基于QAbstractItemModel类,该类提供了十分灵活的接口来处理各种视图,这些视图可以将数据的表现形

weifc-wei 的博客 339

使用Qt Model/View

目录(?)[+] 二预定义模型三视图三委托Delegate 1、利用 Qt 的模型 / 视图架构,我们可以只从模型中获取实际在视图中显示所需要的数据。这样在处理非常大的数据集的时候,可以更加快速,而不至于降低性能。通过把一个模型注册到两个或多个视图,就可以让用户使用不同的方式查看数据以及和数据交互。 Qt 对于多个视图会自动保持同步,从而使对一个视图的改变会影响到全部视图。

Keep moving…… 800

(一) Qt Model/View 的简单说明

(一)使用Qt Model/View的好处         1、利用 Qt 的模型 / 视图架构,我们可以只从模型中获取实际在视图中显示所需要的数据。这样在处理非常大的数据集的时候,可以更加快速,而不至于降低性能。通过把一个模型注册到两个或多个视图,就可以让用户使用不同的方式查看数据以及和数据交互。 Qt 对于多个视图会自动保持同步,从而使对一个视图的改变会影响到全部视图。

不知道要什么,便什么都想要,最后什么都要不到 937

QT 控件小常识

获取QTextEdit控件值 QTextEdit *textEdit_UserName; //控件声明 QString strUserName = ""; strUserName = ui.textEdit_UserName->toPlainText(); //获取控件值 今天试了用QT的模型显示数据,三种高层类QSqlQueryModel、QSqlTableModel、Q...

xxdjh的博客 187
上一篇: Mac端QT5.14.2配置mysql出现的driver not loaded
下一篇: 了解QT中使用的QJson
巨蟹贼香
博客等级 码龄9年 76粉丝 43原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值