QT数据库实验

一、实验目的和要求

1、掌握Qt中掌握绘图工具和图形界面设计;绘制常见的图形。

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

3、了解滚动条、滑动条、进度条、旋转按钮控件的用法。

二、实验内容

1、设计一个绘图软件,完成图像的绘制操作。

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

3、利用滚动条、滑动条、进度条、旋转按钮控件完成绘图相关操作。

4、拓展功能:请添加一个删除功能,删除数据库中指定行的数据。

三、实验步骤

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

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

4、鼠标选中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)
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)
QSqlQuery query;
query.prepare("UPDATE users SET age = :age WHERE name = :name");
query.bindValue(":age", 30);
query.bindValue(":name", "张三");
query.exec();
4. 删除数据(Delete)
QSqlQuery query;
query.prepare("DELETE FROM users WHERE id = :id");
query.bindValue(":id", 1);
query.exec();
________________________________________
绑定模型到QTableView
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

相关推荐
不是万能的豆学长9 小时前
filetidy 文件整理助手:一键归类 + 规范重命名(Python 零依赖单文件工具)
大数据·开发语言·python·技术美术
懂点Tech14 小时前
ctfshow MISC入门图片篇(信息附加):misc41解题思路
开发语言·python
catchadmin15 小时前
PHP 8.7 协程新提案 让跨协程代码共享请求身份
开发语言·php
念何架构之路15 小时前
go-grpc设计思想
开发语言·后端·golang
酷炫码神16 小时前
Day 10|Pinia 状态管理:把散落在各组件的数据,收进一个全局仓库
android·开发语言·javascript
Elastic 中国社区官方博客17 小时前
我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic
java·大数据·开发语言·elasticsearch·搜索引擎·全文检索·es
tyn18817 小时前
记录本地安装nacos服务的方法及异常
java·开发语言
步行cgn18 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
传奇开心果编程18 小时前
【Rust入门练中学】第5课:引用与借用
开发语言·rust·引用·编程语言理论·通用编程语言·借用
qetfw18 小时前
Bash 变量:export、位置参数与默认值展开验证
linux·开发语言·chrome·bash