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

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

http://www.xdnf.cn/news/2748.html

相关文章:

  • FPGA-数字时钟
  • whois为什么有时会返回两个不同的域名状态
  • 【Linux】Java 开发者的 Linux 常用命令指南
  • 2024ICPC成都题解
  • Golang实现函数默认参数
  • 人工智能数学基础(一):人工智能与数学
  • 动态规划问题 -- 斐波那契数列模型(解码方法)
  • etcd 的安装及使用
  • 软件评测师考点重点知识
  • ubuntu安装docker,conda,tmux,btop,nvitop
  • 一种用于从视网膜图像中识别疾病的 BERT 式自监督学习 CNN
  • 大模型训练平台:重构 AI 研发范式的智慧基建
  • MCU内存映射技术详解
  • python数据分析(五):Pandas 数据检索技术
  • 鸢尾花(Iris)数据集的多模型分类与可视化分析工具
  • openai agents sdk实战-基于Ollama+qwen2.5+milvus+bge-large-zh-v1.5实现本地知识库
  • 在 C# .NET 中驾驭 JSON:使用 Newtonsoft.Json 进行解析与 POST 请求实战
  • 动态规划
  • 在g2o中,顶点(Vertex)和边(Edge)插入到概率图的流程
  • 迈瑞医疗:国际业务增长21.28% 发展中国家成重要增长引擎
  • 如何修复卡在恢复模式下的 iPhone:简短指南
  • 配置管理平台Nacos01:基础安装教程和启动运行
  • 第十五届中国国际道路交通安全产品博览会回顾
  • 2025年ISA Trans SCI2区TOP:超级哈里斯鹰算法Super-HHO+高功率机车悬挂载荷偏差控制,深度解析+性能实测
  • 5G育种技术之植物性状订制
  • 智慧健康养老实训室建设方案:科技引领养老健康服务人才培养
  • 第十六节:开放性问题-Vue与React Hooks对比
  • 使用阿里云 CDN 保护网站真实 IP:完整配置指南
  • Wireshark快速入门--对启动的后端程序进行抓包
  • 杰里芯片 7083G 之通话数据dump