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控件名称分别修改为nameEdit、ageEdit,QTableView控件名称修改为tableView,Push 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 、分析 Qt SQLite 类的使用及数据库中常用的增删改查操作。 核心类及其功能 | 类名 | 作用 | 关键方法 | |--------------------|---------------------------|--------------------------------------------------------------------------------------| | 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 |

相关推荐
Jay Kay1 小时前
跳跃表可视化深度解析:动态演示数据结构核心原理
数据结构·数据库
千册4 小时前
python+pyside6+sqlite 数据库测试
数据库·python·sqlite
java叶新东老师6 小时前
PowerDesigner 画ER图并生成sql 教程
数据库·sql
Jonariguez6 小时前
Mysql InnoDB存储引擎
数据库·mysql
nbsaas-boot7 小时前
SQL Server 窗口函数全指南(函数用法与场景)
开发语言·数据库·python·sql·sql server
Y.ppm7 小时前
数分思维12:SQL技巧与分析方法
数据库·sql
森叶7 小时前
Claude Code 安装向量数据库MCP服务
数据库
bestsun9997 小时前
Time drifts can result in unexpected behavior such as time-outs.
数据库·oracle
waveee1238 小时前
学习嵌入式的第三十四天-数据结构-(2025.7.29)数据库
数据结构·数据库·学习
何传令8 小时前
SQL优化系统解析
数据库·sql·mysql