当前位置: 首页 > news >正文

Qt C++数据库实验

一、实验目的和要求

1、掌握Qt中数据库SQL类数据库的查询、插入和更新操作。

2、熟悉Qt界面设计中常用的控件。

3、了解数据库相关类。

二、实验内容

1、设计一个数据库操作软件,完成数据库的相关操作。

2、建立按钮的信号与槽函数,实现点击按钮进行相应文件操作。

3、利用SQLite完成数据库相关操作。

三、实验步骤

1、新建工程,选择Qt Widgets Applocation选项,工程名称为Sql_test,类名设置为MainWidget继承的父类为Qwidget

2、双击打开mainwdget.ui文件,打开界面设计,分别使用鼠标拖放三个Push Button、两个QLineEdit控件、一个QTableView控件,并将QLineEdit控件名称分别修改为nameEditageEditQTableView控件名称修改为tableViewPush Button控件名称分别修改为insertButton、queryButton、updateButton,按钮文本分别修改为“插入数据、查询数据及更新数据”

3、鼠标选中insertButton、queryButton、updateButton三个按钮,右键菜单选择转到槽,选择clicked()信号

 

四、问题讨论

1、分析不同控件的作用、功能和用法。

2、分析Qt中SQLite类的使用及数据库中常用的增删改查操作。

3、在实验报告中逐行分析程序代码功能。

  1. 分析不同控件的作用、功能和用法。

Qt常用控件及其作用

控件

作用

常用功能

用法示例

QPushButton

触发用户操作(如提交、取消)

- 点击事件(clicked信号)
- 设置文本/图标
- 禁用/启用状态

cpp<br>QPushButton *button = new QPushButton("提交", this);<br>connect(button, &QPushButton::clicked, this, &MyClass::onSubmit);<br>

QLineEdit

单行文本输入

- 获取/设置文本(text()
- 输入验证(如正则表达式)
- 占位符提示(setPlaceholderText

cpp<br>QLineEdit *nameEdit = new QLineEdit(this);<br>QString name = nameEdit->text();<br>

QTableView

显示表格数据(通常与数据库模型绑定)

- 绑定数据模型(setModel
- 自定义列宽/行高
- 选择模式(单选/多选)

cpp<br>QTableView *view = new QTableView(this);<br>view->setModel(model);<br>

QMessageBox

弹出提示对话框(警告、错误、信息等)

- 显示消息(information/warning/critical
- 确认对话框(question

cpp<br>QMessageBox::information(this, "标题", "操作成功!");<br>

QComboBox

下拉选择框

- 添加选项(addItem
- 获取当前选项(currentText
- 信号(currentIndexChanged

cpp<br>QComboBox *combo = new QComboBox(this);<br>combo->addItem("

控件使用场景

  • 数据库操作
    • QLineEdit输入数据 → QPushButton触发插入 → QTableView显示结果。
    • QMessageBox反馈操作状态(如“插入成功”)。
  • 表单验证
    • 通过QLineEdit的validator限制输入格式(如年龄必须为数字)。

2、分析QtSQLite类的使用及数据库中常用的增删改查操作。

核心类及其功能

类名

作用

关键方法

QSqlDatabase

管理数据库连接

- addDatabase("QSQLITE"):指定驱动类型
- setDatabaseName("test.db"):设置数据库文件路径
- open():打开连接

QSqlQuery

执行SQL语句

- exec("SQL语句"):执行查询
- prepare() + bindValue():参数化查询(防SQL注入)

QSqlTableModel

提供可编辑的数据模型(绑定到QTableView

- setTable("表名")
- select()
:加载数据
- setEditStrategy():设置编辑策略

1. 插入数据(Create

cpp

复制

下载

QSqlQuery query;

query.prepare("INSERT INTO users (name, age) VALUES (:name, :age)");

query.bindValue(":name", "张三");

query.bindValue(":age", 25);

if (!query.exec()) {

    qDebug() << "插入失败:" << query.lastError().text();

}

2. 查询数据(Read

cpp

复制

下载

QSqlQuery query("SELECT * FROM users");

while (query.next()) {

    QString name = query.value("name").toString();

    int age = query.value("age").toInt();

    qDebug() << name << age;

}

3. 更新数据(Update

cpp

复制

下载

QSqlQuery query;

query.prepare("UPDATE users SET age = :age WHERE name = :name");

query.bindValue(":age", 30);

query.bindValue(":name", "张三");

query.exec();

4. 删除数据(Delete

cpp

复制

下载

QSqlQuery query;

query.prepare("DELETE FROM users WHERE id = :id");

query.bindValue(":id", 1);

query.exec();


绑定模型到QTableView

cpp

复制

下载

QSqlTableModel *model = new QSqlTableModel(this);

model->setTable("users");

model->select(); // 加载数据

ui->tableView->setModel(model); // 绑定到视图


注意事项

  1. SQL注入:始终使用prepare()和bindValue(),避免拼接SQL字符串。
  2. 错误处理:检查exec()返回值,并通过lastError()获取错误信息。
  3. 资源释放:关闭数据库连接(db.close()),避免内存泄漏。

3、在实验报告中逐行分析程序代码功能。

Mainwidgt.h

Mainwidgt.ccp

Databasemannage.h

Databasemannage.ccp

相关文章:

Qt C++数据库实验

一、实验目的和要求 1、掌握Qt中数据库SQL类数据库的查询、插入和更新操作。 2、熟悉Qt界面设计中常用的控件。 3、了解数据库相关类。 二、实验内容 1、设计一个数据库操作软件&#xff0c;完成数据库的相关操作。 2、建立按钮的信号与槽函数&#xff0c;实现点击按钮进…...

相机-IMU联合标定:IMU标定

文章目录 📚 简介🚀标定工具安装📌 IMU标定工具 code_utils📌 IMU标定工具 imu_utils:🚀标定数据录制🚀IMU标定📚 简介 在 VINS(Visual-Inertial Navigation System,视觉惯性导航系统) 中,IMU标定 是确保系统高精度运行的关键环节。IMU(惯性测量单元)本身…...

榕壹云信用租赁系统:基于ThinkPHP+MySQL+UniApp的全链路免押租赁解决方案

信用租赁时代的全流程数字化革新 随着共享经济与信用体系的深度融合,传统租赁行业正面临效率与信任的双重挑战。榕壹云信用租赁系统依托ThinkPHP高性能框架、MySQL数据库与UniApp跨平台开发技术,构建了一套覆盖设备租赁全生命周期的数字化解决方案。通过整合多因子身份认证、…...

C语言中的指针详解

指针是C语言中非常强大且复杂的特性之一&#xff0c;它为我们提供了更灵活的内存管理方式&#xff0c;使得程序能够直接操作内存&#xff0c;提升效率和性能。尽管指针非常强大&#xff0c;但如果不理解它的概念和使用方式&#xff0c;很容易出现错误。因此&#xff0c;理解指针…...

NIPS2021 | 视觉 Transformer 的有趣特性

Intriguing Properties of Vision Transformers 摘要-Abstract引言-Introduction相关工作-Related Work视觉Transformer的有趣特性-Intriguing Properties of Vision Transformers视觉Transformer对遮挡具有鲁棒性吗&#xff1f;-Are Vision Transformers Robust to Occlusions…...

贪心算法-2208.将数组和减半的最小操作数-力扣(LeetCode)

一、题目解析 这里要注意恰好这个字眼&#xff0c;说明对任意数减小一半是不需要向上取整的&#xff0c;所以我们需要定义double类型的数据。 二、算法解析 我们需要将数组和减小为一半的次数最少&#xff0c;所以根据贪心算法&#xff0c;我们需要取数组中最大的数进行减半操…...

如何搭建spark yarn 模式的集群集群。

下载 App 如何搭建spark yarn 模式的集群集群。 搭建Spark on YARN集群的详细步骤 Spark on YARN模式允许Spark作业在Hadoop YARN资源管理器上运行&#xff0c;利用YARN进行资源调度。以下是搭建步骤&#xff1a; 一、前提条件 已安装并配置好的Hadoop集群&#xff08;包括HDF…...

嵌入式开发面试典型编程题解析:排序算法、指针操作、字符处理、递归原理等基础原理的深度解析。

在嵌入式开发面试中&#xff0c;编程题是常见的考察形式&#xff0c;旨在检验求职者对基础编程知识的掌握和应用能力。以下是几道典型的嵌入式面试编程题及详细解析&#xff0c;帮助新手逐步理解和掌握相关知识点。 一、用交换法对学生成绩降序排序 题目描述 在嵌入式系统开…...

DeepSeek+即梦:AI视频创作从0到1全突破

目录 一、开启 AI 视频创作大门&#xff1a;前期准备1.1 注册与登录1.2 熟悉工具界面1.3 硬件与网络要求 二、用 DeepSeek 构思视频脚本2.1 明确创作主题与目标2.2 编写优质提示词2.3 生成并优化脚本 三、即梦 AI 实现画面生成3.1 文生图基础操作3.2 调整参数提升画质3.3 保持人…...

npm init、换源问题踩坑

文章目录 一、 问题复现二、问题解决 一、 问题复现 成功安装nodejs 以及 npm 版本如下&#xff1a; > node -v > v20.18.0 > npm -v > 10.8.2使用 npm init 命令时延时过长&#xff0c;考虑换源&#xff0c;使用指令 npm config set registry https://registr…...

TRex 控制台命令解析

TRex 是一种高性能的网络测试工具&#xff0c;用于生成和分析网络流量。以下是对这些命令的简要解释&#xff1a; 一、help Console Commands&#xff08;控制台命令&#xff09; capture&#xff1a;管理 PCAP 捕获。debug&#xff1a;用于开发的内部调试器。events&#x…...

【Shell 脚本入门】轻松上手的实战指南

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Shell脚本编程 目录 一&#xff1a;&#x1f525; 什么是 Shell &#x1f98b; 常见的 Shell 类型 二&#xff1a;&#x1f525; 什么是 Shell 脚本 &#x1f98b; Shell 脚本规则&#x1f98b; 第…...

数据结构*栈

栈 什么是栈 这里的栈与我们之前常说的栈是不同的。之前我们说的栈是内存栈&#xff0c;它是JVM内存的一部分&#xff0c;用于存储局部变量、方法调用信息等。每个线程都有自己独立的栈空间&#xff0c;当线程启动时&#xff0c;栈就会被创建&#xff1b;线程结束&#xff0c…...

零基础制作Freertos智能小车(教程非常简易)持续更新中....

从现开始&#xff0c;将陆续推出各类简单的DIY电子设计&#xff0c;由简入深&#xff0c;将自己的制作过程全部分享出来&#xff0c;巩固自己知识的同时希望借此机会认识更多喜欢电子设计的小伙伴。 本次小车的主控芯片采用stm32f103c8t6&#xff0c;主要是便宜好用&am…...

Leetcode - 双周赛155

目录 一&#xff0c;3527. 找到最常见的回答二&#xff0c;3528. 单位转换 I三&#xff0c;3529. 统计水平子串和垂直子串重叠格子的数目四&#xff0c;3530. 有向无环图中合法拓扑排序的最大利润 一&#xff0c;3527. 找到最常见的回答 题目列表 本题是一道模拟题&#xff0…...

详解RabbitMQ工作模式之工作队列模式

目录 工作队列模式 概念 特点 应用场景 工作原理 注意事项 代码案例 引入依赖 常量类 编写生产者代码 编写消费者1代码 编写消费者2代码 先运行生产者&#xff0c;后运行消费者 先运行消费者&#xff0c;后运行生产者 工作队列模式 概念 在工作队列模式中&#x…...

QGIS+mcp的安装和使用

QGISmcp的安装和使用 安装qgis_mcp 下载qgis_mcp&#xff1a; git clone https://github.com/jjsantos01/qgis_mcp.git安装uv uv是一个由Rust语言编写的python包管理工具&#xff0c;旨在提供比传统工具&#xff08;如 pip&#xff09;更高效的依赖管理和虚拟环境操作。 p…...

Java基础361问第16问——枚举为什么导致空指针?

我们看一段代码 public enum Color {RED, BLUE, YELLOW;public static Color parse(String color) {return null;} }public static void main() {Color color Color.parse("");// 极具迷惑性&#xff0c;大家日常开发肯定这么写过switch (color) {case RED:break;c…...

在 C# .NET 中驾驭 JSON:使用 Newtonsoft.Json 进行解析与 POST 请求实战

JSON (JavaScript Object Notation) 已经成为现代 Web 应用和服务之间数据交换的通用语言。无论你是开发后端 API、与第三方服务集成&#xff0c;还是处理配置文件&#xff0c;都绕不开 JSON 的解析与生成。在 C# .NET 世界里&#xff0c;处理 JSON 有多种选择&#xff0c;其中…...

CentOS7——Docker部署java服务

1、安装Docker 首先要确保系统已安装 Docker&#xff0c;若未安装&#xff0c;可以参考我的另一篇文章现在CentOS7上安装Docker&#xff0c;文章地址如下&#xff1a; CentOS7系统安装Docker教程-CSDN博客 Docker当中要安装必备的软件&#xff0c;比如Java运行必要的JDK&#…...

Python-Part2-集合、字典与推导式

Python-Part2-集合、字典与推导式 1. set集合 ⽆序&#xff0c;去掉重复数据。 set1 {1,2,3,4,5,5,4,3,2,1}print(type(set1))print(set1)set2.add(66666)set2.remove(55)#不能使用下标访问set&#xff0c;所以修改操作一般为remove操作 add操作2.dict 字典 字典&#xff…...

《AI大模型应知应会100篇》第39篇:多模态大模型应用:文本、图像和音频的协同处理

第39篇&#xff1a;多模态大模型应用&#xff1a;文本、图像和音频的协同处理 摘要 随着人工智能技术的发展&#xff0c;多模态大模型&#xff08;Multimodal Large Models&#xff09;已经成为AI领域的热点之一。这些模型能够同时处理文本、图像、音频等多种模态数据&#xf…...

kvm学习小结

安装相关包 安装虚拟化相关包 apt install qemu-kvm qemu-system libvirt-clients libvirt-daemon-system vlan bridge-utils 安装界面相关包 apt install xinit gdmd 配置机器允许root登录 检查cpu是否支持虚拟化 egrep -o vmx|svm /proc/cpuinfo 执行命令systemctl s…...

k8s基本概念-YAML

YAML介绍 YAML是“YAML Aint a Markup Language” (YAML不是一种置标语言)的递归缩进写,早先YAML的意思其实是:“Yet Another Markup Language”(另一种置标语言) YAML是一个类似XML、JSON的标记性语言。YAML强调以数据为中心,并不是以标识语言为重点。因而YAML本身的定义…...

wps批注线条怎么取消去掉wps批注后有竖线

wps批注线条怎么取消去掉wps批注后有竖线 问题 图片 解决方案 图片 word批注线条取消的方法&#xff1a; 1.打开Word文档,点击需要删除的批注。 2.然后点击工具栏“审阅”选项。 3.接着点击“接受“ 4.接受对文档所做的所有修订(H)...

深度解析算法之分治(归并)

48.排序数组 题目链接 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 你必须在 不使用任何内置函数 的情况下解决问题&#xff0c;时间复杂度为 O(nlog(n))&#xff0c;并且空间复杂度尽可能小。 示例 1&#xff1a; 输入&#xff1a; nums [5,2,3,1] 输出&am…...

僵尸进程是什么?

僵尸进程&#xff08;Zombie Process&#xff09;是指在 Unix/Linux 系统中&#xff0c;一个子进程已经终止&#xff0c;但其父进程尚未对它进行善后处理&#xff08;即没有读取其退出状态&#xff09;&#xff0c;导致子进程的进程表项仍然保留在系统中。由于这个进程已经结束…...

城市群出行需求的时空分形

城市群出行需求的时空分形 原文&#xff1a;He, Zhengbing. “Spatial-temporal fractal of urban agglomeration travel demand.” Physica A: Statistical Mechanics and its Applications 549 (2020): 124503. 1. Introduction&#xff08;引言&#xff09; 城市区域的重…...

LangChain入门(二)安装开发环境

1.安装conda Conda 是一个开源的软件包管理系统和环境管理系统&#xff0c;用于安装多个版本的软件包及其依赖关系&#xff0c;并在它们之间轻松切换。 Anaconda是一个开源的Python发行版本&#xff0c;其包含了conda、python等软件包&#xff0c;numpy、pandas、scipy等科学…...

如何开展有组织的AI素养教育?

一、AI素养的定义与核心内涵 AI素养是智能时代个体适应与创新能力的综合体现&#xff0c;其内涵随着技术发展动态扩展&#xff0c;包含以下核心维度&#xff1a; 知识体系&#xff1a;理解AI基本原理&#xff08;如算法、数据、算力&#xff09;、技术边界及发展趋势&#xff…...

InnoDB对LRU算法的优化

标准 LRU 算法的核心思想是&#xff1a;当缓存空间不足时&#xff0c;淘汰掉最近最少使用的数据块&#xff08;Page&#xff09;。它通常用一个链表来实现&#xff0c;链表头部是最近访问的 Page&#xff0c;链表尾部是最久未访问的 Page。 然而&#xff0c;在数据库系统中直接…...

云原生--核心组件-容器篇-7-Docker私有镜像仓库--Harbor

1、Harbor的定义与核心作用 定义&#xff1a; Harbor是由VMware开源的企业级容器镜像仓库系统&#xff0c;后捐赠给 CNCF (Cloud Native Computing Foundation)。它基于Docker Registry扩展了企业级功能&#xff0c;用于存储、分发和管理容器镜像&#xff08;如Docker、OCI标准…...

TypeScript 实用类型深度解析:Partial、Pick、Record 的妙用

需求背景&#xff1a;在后台系统的用户管理模块中&#xff0c;我们常遇到这样的场景&#xff1a;修改用户资料时只需要传部分字段&#xff0c;展示用户列表时要隐藏敏感信息&#xff0c;快速查找用户需要ID索引等等&#xff0c;这些业务需求都可以通过 TypeScript 的实用类型优…...

【Pandas】pandas DataFrame rmod

Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于执行 DataFrame 与另一个对象&#xff08;如 DataFrame、Series 或标量&#xff09;的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于执行 DataFrame 与另一个对象&…...

如何搭建spark yarn 模式的集群集群

以下是搭建Spark YARN模式集群的一般步骤&#xff1a; 准备工作 - 确保集群中各节点安装了Java环境&#xff0c;并配置好 JAVA_HOME 环境变量。 - 各节点间能通过SSH免密登录。 - 安装并配置好Hadoop集群&#xff0c;YARN作为Hadoop的资源管理器&#xff0c;Spark YARN模式需要…...

云原生--核心组件-容器篇-6-Docker核心之-镜像仓库(公共仓库,私有仓库,第三方仓库)

1、Docker仓库的定义与核心作用 定义&#xff1a; Docker仓库&#xff08;Docker Registry&#xff09;是用于存储、分发和管理Docker镜像的集中式存储库。它类似于代码仓库&#xff0c;但专门用于容器镜像的版本控制和共享。它允许开发人员和IT团队高效地管理、部署和分享容器…...

mysql8.0版本部署+日志清理+rsync备份策略

mysql安装&#xff1a;https://blog.csdn.net/qq_39399966/article/details/120205461 系统&#xff1a;centos7.9 数据库版本&#xff1a;mysql8.0.28 1.卸载旧的mysql,保证环境纯净 rpm -qa | grep mariadb mariadb-5.... rpm -e --nodeps 软件 rpm -e --nodeps mariadb-5.…...

搭建spark yarn 模式的集群集群

一.引言 在大数据处理领域&#xff0c;Apache Spark 是一个强大的分布式计算框架&#xff0c;而 YARN&#xff08;Yet Another Resource Negotiator&#xff09;是 Hadoop 的资源管理系统。将 Spark 运行在 YARN 模式下&#xff0c;可以充分利用 YARN 强大的资源管理和调度能力…...

在uni-app中使用Painter生成小程序海报

在uni-app中使用Painter生成小程序海报 安装Painter 从GitHub下载Painter组件&#xff1a;https://github.com/Kujiale-Mobile/Painter 将painter文件夹复制到uni-app项目的components目录下 配置页面 在需要使用海报的页面的pages.json中配置 {"path": "pag…...

Uni-app网络请求AES加密解密实现

Uni-app 网络请求封装与 AES 加密解密实现 下面我将为你提供一个完整的 Uni-app 网络请求封装方案&#xff0c;包含 POST 请求的统一处理、请求参数和响应数据的 AES 加密解密。 1. 创建加密解密工具类 首先创建一个 crypto.js 文件用于处理 AES 加密解密&#xff1a; // u…...

uniapp实现统一添加后端请求Header方法

uniapp把请求写完了&#xff0c;发现需要给接口请求添加头部&#xff0c;每个接口去添加又很麻烦&#xff0c;uniapp可以统一添加&#xff0c;并且还能给某些接口设置不添加头部。 一般用于添加token登录验证信息。 在 main.js 文件中配置。 代码如下&#xff1a; // 在…...

uniapp打包apk如何实现版本更新

我们做的比较简单&#xff0c;在后端设置版本号&#xff0c;并在uniapp的config.js中定义版本号&#xff0c;每次跟后端的进行对比&#xff0c;不一致的话就更新。 一、下载apk 主要代码&#xff08;下载安装包&#xff0c;并进行安装&#xff0c;一般得手动同意安装&#xf…...

【Java开发日记】OpenFeign 的 9 个坑

目录 坑一&#xff1a;用对Http Client 1.1 feign中http client 1.2 ribbon中的Http Client 坑二&#xff1a;全局超时时间 坑三&#xff1a;单服务设置超时时间 坑四&#xff1a;熔断超时时间 4.1 使用feign超时 4.2 使用ribbon超时 4.3 使用自定义Options 坑五&…...

RocketMQ 存储核心:深入解析 CommitLog 设计原理

一、引言 在分布式消息队列系统中&#xff0c;消息存储的可靠性和高吞吐能力是衡量系统优劣的核心指标。Apache RocketMQ 作为一款高性能、高可用的分布式消息中间件&#xff0c;其独特的 CommitLog 存储机制在消息持久化过程中扮演了关键角色。本文将深入剖析 CommitLog 的设…...

【C++ Qt】快速上手 显⽰类控件(Label、LCDNumber、ProcessBar、CalendarWidget)

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论​&#xff1a; 本文围绕Qt中常用的显示类控件展开&#xff0c;重点讲解了 QLabel&#xff08;文本/图片显示&#xff09;、QLCDNumber&#xff08;数字显示&#xff0…...

Docker和K8s面试题

1.Docker底层依托于linux怎么实现资源隔离的&#xff1f; 基于Namespace的视图隔离&#xff1a;Docker利用Linux命名空间&#xff08;Namespace&#xff09;来实现不同容器之间的隔离。每个容器都运行在自己的一组命名空间中、包括PID&#xff08;进程&#xff09;、网络、挂载…...

shell--数组、正则表达式RE

1.数组 1.1定义 什么是数组? 数组也是一种变量,常规变量只能保存一个值,数组可以保存多个值 1.2 分类 普通数组:只能用整数作为数组的索引--0 下标 有序数组(普通数组):(index)索引(为整数,从0开始) 关联数组:可以使用字符串作为数组的索引 1.3 普通数组 引用: ec…...

java 使用 POI 为 word 文档自动生成书签

poi 版本&#xff1a;4.1.0 <properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><…...

redis+lua+固定窗口实现分布式限流

用key的过期时间替代固定窗口的时间戳 -- KEYS[1]: 限流的key -- ARGV[1]: 限流窗口大小&#xff08;秒&#xff09; -- ARGV[2]: 限流阈值local key KEYS[1] local window tonumber(ARGV[1]) local limit tonumber(ARGV[2])-- 尝试获取当前计数 local current redis.call…...

什么是SQL92标准,有什么特点和影响?

一、SQL92简介 SQL92标准是1992年由美国国家标准协会&#xff08;ANSI&#xff09;和国际标准化组织&#xff08;ISO&#xff09;联合制定的数据库语言标准&#xff0c;正式名称为"SQL&#xff1a;1992"或ISO/IEC 9075:1992。他是关系型数据库管理系统&#xff08;R…...