QT简易项目 数据库可视化界面 数据库编程SQLITE QT5.12.3环境 C++实现

案例需求:

完成数据库插入,删除,修改,查看操作。


分为 插入,删除,修改,查看,查询 几个模块。


代码:

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
#include <QSqlError>
#include <QDateTime>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = nullptr);~Widget();void display();private slots:void on_insert_button_clicked();void on_delete_button_clicked();void on_update_button_clicked();void on_query_button_clicked();private:Ui::Widget *ui;QSqlDatabase db;QSqlQuery *query;
};#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);this->setWindowTitle("数据库可视化窗口");// 加载数据库的驱动db = QSqlDatabase::addDatabase("QSQLITE");// 设置本地数据库文件db.setDatabaseName("stu.db");// 打开数据库if(db.open())   qDebug()<<"打开成功....";else    qDebug()<<"打开失败....";// 向数据库发送sql语句query = new QSqlQuery; // 不可指定父对象if(query->exec("CREATE TABLE IF NOT EXISTS stu_info (id INT PRIMARY KEY,name STRING(32),score DOUBLE)"))qDebug()<<"创建table成功....";else    qDebug()<<"创建table失败:"<<query->lastError().text();// 显示display();
}Widget::~Widget()
{delete ui;delete  query; // 因为调用时不能指定父对象,所以需要手动释放// 关闭数据库db.close();}
// displlay
void Widget::display(){query->exec(QString("SELECT * FROM stu_info"));while(query->next()){int id = query->value("id").toInt();QString name = query->value("name").toString();double score = query->value("score").toDouble();ui->plainTextEdit->appendPlainText(QString("id : %1 | name : %2 | score : %3").arg(id).arg(name).arg(score));}
}
// insert
void Widget::on_insert_button_clicked(){QDateTime currentDate = QDateTime::currentDateTime();QString dateTimeString = currentDate.toString("yyyy-MM-dd hh:mm:ss");if(ui->num_edit->text() == "" || ui->name_edit->text() == "" || ui->score_edit->text() == ""){qDebug()<<"信息缺失 插入失败:"<<query->lastError().text();ui->plainTextEdit->appendPlainText(QString("%1 信息缺失 插入失败....").arg(dateTimeString));return ;}int num = ui->num_edit->text().toInt();QString name = ui->name_edit->text();double score = ui->score_edit->text().toDouble();if(query->exec(QString("INSERT INTO stu_info VALUES('%1','%2','%3')").arg(num).arg(name).arg(score))){qDebug()<<dateTimeString<<"插入成功....";ui->plainTextEdit->appendPlainText(QString("%1 插入成功....").arg(dateTimeString));display();}else{qDebug()<<"插入失败:"<<query->lastError().text();ui->plainTextEdit->appendPlainText(QString("%1 插入失败....").arg(dateTimeString));}
}
// delete
void Widget::on_delete_button_clicked()
{QDateTime currentDate = QDateTime::currentDateTime();QString dateTimeString = currentDate.toString("yyyy-MM-dd hh:mm:ss");if(ui->num_edit->text() == ""){qDebug()<<dateTimeString<<"学号不存在 删除失败....";ui->plainTextEdit->appendPlainText(QString("%1 学号不存在 删除失败....").arg(dateTimeString));}else if(query->exec(QString("DELETE FROM stu_info WHERE id = %1").arg(ui->num_edit->text().toInt()))){qDebug()<<dateTimeString<<"删除成功....";ui->plainTextEdit->appendPlainText(QString("%1 删除成功....").arg(dateTimeString));display();}else{qDebug()<<"删除失败:"<<query->lastError().text();ui->plainTextEdit->appendPlainText(QString("%1 删除失败....").arg(dateTimeString));}
}
// update
void Widget::on_update_button_clicked()
{QDateTime currentDate = QDateTime::currentDateTime();QString dateTimeString = currentDate.toString("yyyy-MM-dd hh:mm:ss");if(query->exec(QString("UPDATE stu_info SET id = %1, name = '%2', score = %3 WHERE id = %4").arg(ui->num_edit->text().toInt()).arg(ui->name_edit->text()).arg(ui->score_edit->text().toDouble()).arg(ui->num_edit->text().toInt()))){qDebug()<<dateTimeString<<"更新成功....";ui->plainTextEdit->appendPlainText(QString("%1 更新成功....").arg(dateTimeString));display();}else{qDebug()<<"更新失败:"<<query->lastError().text();ui->plainTextEdit->appendPlainText(QString("%1 更新失败....").arg(dateTimeString));}
}
// query
void Widget::on_query_button_clicked()
{//SELECT * FROM stu_info WHERE id = %1QDateTime currentDate = QDateTime::currentDateTime();QString dateTimeString = currentDate.toString("yyyy-MM-dd hh:mm:ss");if(query->exec(QString("SELECT * FROM stu_info WHERE id = %1").arg(ui->num_edit->text().toInt()))){qDebug()<<dateTimeString<<"查询成功....";ui->plainTextEdit->appendPlainText(QString("%1 查询成功....").arg(dateTimeString));// 显示while(query->next()){int id = query->value("id").toInt();QString name = query->value("name").toString();double score = query->value("score").toDouble();ui->plainTextEdit->appendPlainText(QString("id : %1 | name : %2 | score : %3").arg(id).arg(name).arg(score));}}else{qDebug()<<"查询失败:"<<query->lastError().text();ui->plainTextEdit->appendPlainText(QString("%1 查询失败....").arg(dateTimeString));}
}

widget.ui


输出:

初始界面:

插入:

修改:

删除:

查询:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/478593.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

刷题——字符串中的单词数(力扣)

文章目录 一、读题二、思路问题1&#xff1a;解决思路&#xff1a;分割方法&#xff1a;方法1、方法2、 三、代码实现&#xff1a;方法1、方法2、 一、读题 题目来源&#xff1a;https://leetcode.cn/problems/number-of-segments-in-a-string/description/ 首先看例子&#xf…

【人工智能】PyTorch、TensorFlow 和 Keras 全面解析与对比:深度学习框架的终极指南

文章目录 PyTorch 全面解析2.1 PyTorch 的发展历程2.2 PyTorch 的核心特点2.3 PyTorch 的应用场景 TensorFlow 全面解析3.1 TensorFlow 的发展历程3.2 TensorFlow 的核心特点3.3 TensorFlow 的应用场景 Keras 全面解析4.1 Keras 的发展历程4.2 Keras 的核心特点4.3 Keras 的应用…

什么是 WPF 中的依赖属性?有什么作用?

依赖属性&#xff08;Dependency Property&#xff09;是 WPF 的一个核心概念&#xff0c;它为传统的 .NET 属性提供了增强功能&#xff0c;支持绑定、样式、动画和默认值等功能。通过依赖属性&#xff0c;WPF 提供了一种灵活的数据驱动的方式来处理 UI 属性。 1. 什么是依赖属…

在win10环境部署opengauss数据库(包含各种可能遇到的问题解决)

适用于windows环境下通过docker desktop实现opengauss部署&#xff0c;请审题。 文章目录 前言一、部署适合deskdocker的环境二、安装opengauss数据库1.配置docker镜像源2.拉取镜像源 总结 前言 注意事项&#xff1a;后面docker拉取镜像源最好电脑有科学上网工具如果没有科学上…

2024年11月25日Github流行趋势

项目名称&#xff1a;flux 项目维护者&#xff1a;timudk jenuk apolinario zeke thibautRe项目介绍&#xff1a;FLUX.1模型的官方推理仓库。项目star数&#xff1a;17,381项目fork数&#xff1a;1,229 项目名称&#xff1a;screenshot-to-code 项目维护者&#xff1a;abi cle…

Python 爬虫从入门到(不)入狱学习笔记

爬虫的流程&#xff1a;从入门到入狱 1 获取网页内容1.1 发送 HTTP 请求1.2 Python 的 Requests 库1.2 实战&#xff1a;豆瓣电影 scrape_douban.py 2 解析网页内容2.1 HTML 网页结构2.2 Python 的 Beautiful Soup 库 3 存储或分析数据&#xff08;略&#xff09; 一般爬虫的基…

Linux麦克风录音实战

在 Linux 上使用麦克风进行录音可以通过多种方式实现&#xff0c;包括使用命令行工具、图形界面应用程序以及编程接口。下面我将介绍几种常见的方法&#xff0c;从简单的命令行工具到使用 PortAudio 库进行编程。 一. 使用arecord命令行工具 arecord 是 ALSA&#xff08;Adva…

oracle会话追踪

一 跟踪当前会话 1.1 查看当前会话的SID,SERIAL# #在当前会话里执行 示例&#xff1a; SQL> select distinct userenv(sid) from v$mystat; USERENV(SID) -------------- 1945 SQL> select distinct sid,serial# from v$session where sid1945; SID SERIAL# …

ThingsBoard规则链节点:Azure IoT Hub 节点详解

目录 引言 1. Azure IoT Hub 节点简介 2. 节点配置 2.1 基本配置示例 3. 使用场景 3.1 数据传输 3.2 数据分析 3.3 设备管理 4. 实际项目中的应用 4.1 项目背景 4.2 项目需求 4.3 实现步骤 5. 总结 引言 ThingsBoard 是一个开源的物联网平台&#xff0c;提供了设备…

数据结构(Java版)第二期:包装类和泛型

目录 一、包装类 1.1. 基本类型和对应的包装类 1.2. 装箱和拆箱 1.3. 自动装箱和自动拆箱 二、泛型的概念 三、引出泛型 3.1. 语法规则 3.2. 泛型的优点 四、类型擦除 4.1. 擦除的机制 五、泛型的上界 5.1. 泛型的上界的定义 5.2. 语法规则 六、泛型方法 6.1…

STM32端口模拟编码器输入

文章目录 前言一、正交编码器是什么&#xff1f;二、使用步骤2.1开启时钟2.2配置编码器引脚 TIM3 CH1(PA6) CH2 (PA7)上拉输入2.3.初始化编码器时基2.4 初始化编码器输入2.5 配置编码器接口2.6 开启定时器2.7获取编码器数据 三、参考程序四、测试结果4.1测试方法4.2串口输出结果…

商业物联网:拥抱生产力的未来

在现代商业格局中&#xff0c;数据占据至高无上的地位。物联网&#xff08;IoT&#xff09;站在这场数字革命的前沿&#xff0c;将以往模糊不清的不确定因素转变为可衡量、可付诸行动的深刻见解。物联网技术为日常物品配备传感器与连接功能&#xff0c;使其能够实时收集并传输数…

UE5肉鸽游戏教程学习

学习地址推荐&#xff1a;UE5肉鸽项目实战教程_哔哩哔哩_bilibili

【Python】分割秘籍!掌握split()方法,让你的字符串处理轻松无敌!

在Python开发中&#xff0c;字符串处理是最常见也是最基础的任务之一。而在众多字符串操作方法中&#xff0c;split()函数无疑是最为重要和常用的一个。无论你是Python新手&#xff0c;还是经验丰富的开发者&#xff0c;深入理解并熟练运用split()方法&#xff0c;都将大大提升…

sql工具!好用!爱用!

SQLynx的界面设计简洁明了&#xff0c;操作逻辑清晰易懂&#xff0c;没有复杂的图标和按钮&#xff0c;想对哪部分操作就在哪里点击右键&#xff0c;即使你是数据库小白也能轻松上手。 尽管SQLynx是一款免费的工具&#xff0c;但是它的功能却丝毫不逊色于其他付费产品&#xff…

C语言菜鸟入门·关键字·union的用法

目录 1. 简介 2. 访问成员 2.1 声明 2.2 赋值 3. 共用体的大小 4. 与typedef联合使用 5. 更多关键字 1. 简介 共用体&#xff08;union&#xff09;是一种数据结构&#xff0c;它允许在同一内存位置存储不同的数据类型&#xff0c;但每次只能存储其中一种类型的…

运维Tips:Docker或K8s集群拉取Harbor私有容器镜像仓库配置指南

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] Docker与Kubernetes集群拉取Harbor私有容器镜像仓库配置 描述:在现在微服务、云原生的环境下,通常我们会在企业中部署Docker和Kubernetes集群,并且会在企业内部搭建Harbor私有镜像仓库以保证开发源码安全,以及加快…

webrtc音频模块介绍(二) ADM

不同操作系统管理音频设备及提供的音频接口方式各不同&#xff0c;ADM用于屏蔽音频设备管理及接口的差异&#xff0c;抽象统一接口。它的全称是Adio Device Module。 设备管理模块(ADM) 类结构图 首先它肯定是个接口类&#xff0c;不同平台的实现都继承于它&#xff0c;实现…

前后端分离,解决vue+axios跨域和proxyTable不生效等问题

看到我这篇文章前可能你以前看过很多类似的文章。至少我是这样的&#xff0c;因为一直没有很好的解决问题。 正文 当我们通过webstorm等IDE开发工具启动项目的时候&#xff0c;通过命令控制台可以观察到启动项目的命令 如下&#xff1a; webpack-dev-server --inline --prog…

Linux系统使用valgrind分析C++程序内存资源使用情况

内存占用是我们开发的时候需要重点关注的一个问题&#xff0c;我们可以人工根据代码推理出一个消耗内存较大的函数&#xff0c;也可以推理出大概会消耗多少内存&#xff0c;但是这种方法不仅麻烦&#xff0c;而且得到的只是推理的数据&#xff0c;而不是实际的数据。 我们可以…