QSqlTableModel结合使用数据库心得

2023-11-03 00:44

本文主要是介绍QSqlTableModel结合使用数据库心得,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 目的
    • QSqlTableModel
    • 采用Model-View-Delegate(模型视图代理)框架的整体结构
    • QT数据库组件
      • 用户界面层(UI Layer)
      • SQL接口层(SQL API Layer)
      • 驱动程序层(Driver Layer)
    • 实现翻页功能
    • 实现数据库查询功能
      • QSqlDatabase
      • QSqlQuery
      • QSqlRecord

目的

1: 了解QSqlTableMode 与 数据库集合使用
2: 了解mvc结构带来便利性
3: 数量级数据以及如何实现预览

QSqlTableModel

qt 文档如是说:

The QSqlTableModel class provides an editable data model for a single database table.
QSqlTableModel is a high-level interface for reading and writing database records from a single table. 
It is built on top of the lower-level QSqlQuery and can be used to provide data to view classes such as QTableView. 
     QSqlTableModel *model = new QSqlTableModel;model->setTable("employee");model->setEditStrategy(QSqlTableModel::OnManualSubmit);model->select();model->setHeaderData(0, Qt::Horizontal, tr("Name"));model->setHeaderData(1, Qt::Horizontal, tr("Salary"));QTableView *view = new QTableView;view->setModel(model);view->hideColumn(0); // don't show the IDview->show();
We set the SQL table's name and the edit strategy, then we set up the labels displayed in the view header.The edit strategy dictates when the changes done by the user in the view are actually applied to the database. The possible values are OnFieldChange, OnRowChange, and OnManualSubmit.
QSqlTableModel can also be used to access a database programmatically, without binding it to a view:
     QSqlTableModel model;model.setTable("employee");model.select();int salary = model.record(4).value("salary").toInt();The code snippet above extracts the salary field from record 4 in the result set of the query SELECT * from employee.
It is possible to set filters using setFilter(), or modify the sort order using setSort(). At the end, you must call select() to populate the model with data.
The tablemodel example illustrates how to use QSqlTableModel as the data source for a QTableView.
QSqlTableModel provides no direct support for foreign keys. Use the QSqlRelationalTableModel and QSqlRelationalDelegate if you want to resolve foreign keys.

采用Model-View-Delegate(模型视图代理)框架的整体结构

在这里插入图片描述
图中Model就是模型,View是视图,Delegate是代理。三者之间的关系看图已经很清楚了。其中,View用于用户界面交互,包括数据展示的总体框架等;Model用于向View提供数据支持,包括查询数据和保存数据(修改和插入);Delegate用于具体展示数据和具体提供数据编辑功能的用户交互界面。

可以通过QTableView显示对应表格数据。

QT数据库组件

QT数据库模块整体结构
在这里插入图片描述
QT数据库模块包含了用户界面层(UI Layer)、SQL接口层(SQL API Layer),和驱动程序层(Driver Layer)。

在QT应用程序中使用QT数据库模块,必须在项目文件中做如下配置。
对于CMake编译构建管理工具:
QT数据库模块CMake编译构建管理项目配置
在这里插入图片描述
对于qmake编译构建管理工具:
QT数据库模块qmake编译构建管理项目配置
在这里插入图片描述

用户界面层(UI Layer)

这里的UI可以理解成是数据库模块的普通应用开发者的API 接口;按照QT模型视图代理框架的概念体系,这个UI也可以理解成是这些类型可能会放在用户界面相关的程序代码中去用,比如在与视图有关的代码中去调用这些API。
比如QSqlQueryModel经常作为模型类型在模型视图代理框架中使用,当然也可以独立使用。

SQL接口层(SQL API Layer)

QT数据库模块使用QSqlDatabase类型提供通用的数据库的连接和SQL查询操作的API接口。

驱动程序层(Driver Layer)

QT数据库模块使用QSqlDriver类型定义了一些数据库的一些抽象的底层操作。特定数据库相关的具体实现有特定数据库对应的派生类提供。
QT 助手API DOC中描述了QT框架对特定数据库的支持情况如下图所示:
QT数据库模块驱动程序层
在这里插入图片描述

博客参考整理

基于此可以对于千万级数据显示处理效率上还是不错。

实现翻页功能

如果大量数据查询以及显示在ui上, 那必定会加载时间过长, 导致让人体验很不爽。
因此我们要考虑到分页 + 数据查询。

QSqlTableModel+QTableView的组合完成需求,同时要对应QSqlDatabase作为数据库来源对数据进行掌握。
QSqlTableModel 本身不支持分页显示逻辑数据。我们可以通过在selectStatment中进行适当修改去显示某特定页数据。

.h#ifndef KDSQLTABLEMODEL_H
#define KDSQLTABLEMODEL_H#include <QSqlTableModel>
#include <QObject>
#include <QtGlobal>class KDSqlTableModelPrivate;
class KDSqlTableModel : public QSqlTableModel
{Q_OBJECTQ_DECLARE_PRIVATE(KDSqlTableModel)
public:explicit KDSqlTableModel(QObject *parent = nullptr, QSqlDatabase db = QSqlDatabase(<

这篇关于QSqlTableModel结合使用数据库心得的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/334402

相关文章

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

Python使用python-can实现合并BLF文件

《Python使用python-can实现合并BLF文件》python-can库是Python生态中专注于CAN总线通信与数据处理的强大工具,本文将使用python-can为BLF文件合并提供高效灵活... 目录一、python-can 库:CAN 数据处理的利器二、BLF 文件合并核心代码解析1. 基础合

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客