码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Qt扫盲-QSqlQueryModel理论总结


    QSqlQueryModel理论总结

    • 一、概述
    • 二、使用
      • 1. 与 view 视图 绑定
      • 2. 分离视图,只存数据

    一、概述

    QSqlQueryModel是用于执行SQL语句和遍历结果集的高级接口。它构建在较低级的 QSqlQuery之上,可用于向QTableView 等视图类提供数据,也是使用了Qt 的 mode/view 框架。这种方式是非常快的,对于数据的显示是非常方便的一个类,而且这个类主要是用于对 sql 的查询,也就是只读的一个操作,只读取数据,而不会修改数据的一个 model 类。

    当然,在使用这些之前也是要连接数据库的,和正常使用 QSqlQuery 没有什么区别的。

    二、使用

    1. 与 view 视图 绑定

    例如:

    QSqlQueryModel *model = new QSqlQueryModel;
    model->setQuery("SELECT name, salary FROM employee");
    model->setHeaderData(0, Qt::Horizontal, tr("Name"));
    model->setHeaderData(1, Qt::Horizontal, tr("Salary"));
    
    QTableView *view = new QTableView;
    view->setModel(model);
    view->show();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    我们设置了模型的查询,然后设置了显示在视图标题中的标签。当然这个标签也是自己定义的,如果没有定义的话就会使用数据库中的表字段。

    2. 分离视图,只存数据

    QSqlQueryModel也可以通过编程方式访问数据库,而不需要将其绑定到视图:
    在这个情况下,相当于我们通过model 去访问到了数据,避免直接与数据库去交互数据,在model 层的交互就非常的简单。

    在这里插入图片描述

    QSqlQueryModel model;
    model.setQuery("SELECT name, salary FROM employee");
    int salary = model.record(4).value("salary").toInt();
    
    • 1
    • 2
    • 3

    上面的代码片段从SELECT查询的结果集中的第4条记录中提取了salary字段。【要注意索引边界问题】

    由于salary是第2列(或者列索引为1),我们可以将最后一行重写为:

     int salary = model.data(model.index(4, 1)).toInt();
    
    • 1

    通过这样的方式我们也非常方便的去读取了数据库的数据。

    模型默认是只读的。要使它可读可写,必须继承它并重新实现setData()和flags()。另一种选择是使用QSqlTableModel,它提供了基于单个数据库表的读写模型。

  • 相关阅读:
    八股八股八
    ​软考-高级-信息系统项目管理师教程 第四版【第16章-项目采购管理-思维导图】​
    ESP32单片机环境搭建(VScode + PlatformIO IDE)
    刷题记录(NC16692 [NOIP2001]求先序排列,NC204382 中序序列,NC23046 华华教月月做数学)
    Android audio 框架 之AudioPatch
    进程状态和Linux的进程状态
    Cadence OrCAD Capture 新放置的元件为问号无法自动编号解决方法
    备战数学建模39-粒子群算法pso进阶应用番外篇2(攻坚战3)
    5G与物联网应用:新一代网络技术融合开创新时代
    H5互动小游戏如何提升用户留存
  • 原文地址:https://blog.csdn.net/qq_43680827/article/details/133325088
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号