QSqlRelationalTableModel类的用法及示例

QSqlRelationalTableModel关系表模型示例

  1. 示例用到三个表:
    雇员employee,存储雇员的信息,包括雇员id、姓名、城市id、国籍id;
    城市表city,存储城市id,城市名称;
    国家表country,存储国家id、国家名称
  2. 雇员表的城市id是city表的外键:
    model->setRelation(2, QSqlRelation("city", "id", "name"));
    model填充的是employee表数据,2表示employee的第2列(即城市id,city表的外键),“city”表示数据库的city表,“id”表示对应的主键,“name”表示要select的字段;
  3. 雇员表的国籍id是country表的外键:
    model->setRelation(3, QSqlRelation("country", "id", "name"));
    2、3两条语句执行完相当于下面SQL select语句:
   SELECT e.id,e.name,ci.name,co.name
   FROM   employee e
   INNER JOIN  city ci
   ON e.city  = c.id;
   INNER JOIN  country co
   ON e.country= co.id;
  1. 关于std::unique_ptr<QTableView> view(new QTableView());的用法,请参考

  2. 视图使用默认委托view->setItemDelegate(new QSqlRelationalDelegate(view.get()));,双击City列或者Country列,单元项会自动变成QComboBox小部件,供用户选择

    在这里插入图片描述

示例界面

在这里插入图片描述

  • 第1、2列分别显示雇员表employee的雇员id、姓名;第三列显示City表的name字段;第四列显示country表的name字段

示例代码

  1. 新建Qt项目,名称:relationalTableModel。
  2. 双击mainwindow.ui,拖一个QPushButton到窗口上
    在这里插入图片描述
  3. 右击窗体空白处,选择【布局】,【栅格布局】
    在这里插入图片描述
  • 结果如下
    在这里插入图片描述
  • 双击relationaltablemodel.pro,增加下列模块
QT       +=  sql widgets
  • 完整的relationaltablemodel.pro文件代码如下,大部份都是ide自动生成的
QT       += core gui sql widgets

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    ../connection.h \
    mainwindow.h

FORMS += \
    mainwindow.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${
   TARGET}/bin
else: unix:!android: target.path = /opt/$${
   TARGET}/bin
!isEmpty(target.path): INSTALLS += target
  • 数据库头文件connection.h,主要完成默认数据库的创建(后面实例表model对象会用到,默认调用此数据库),以及为数据库建三个表,每个表插入若干条记录,在本例中,这个三个表没有用,我们在mainwindow.cpp中又建了三个表来演示
#ifndef CONNECTION_H
#define CONNECTION_H

#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery><
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值