Qt——连接mysql增删查改(仓库管理极简版)
目录
UI布局设计
.pro文件
mainwindow.h
main.cpp
UI布局设计


.pro文件
QT += core gui
QT += core gui sql
QT += sqlgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \mainwindow.cppHEADERS += \mainwindow.hFORMS += \mainwindow.ui# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QMessageBox>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QDebug>
#include <QtSql/QSqlQueryModel>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void ReshowTable_goods();void ReshowTable_people();void on_move_goods_clicked();void on_move_people_clicked();void on_pushButton_addgoods_clicked();void on_pushButton_selectgoods_clicked();void on_pushButton_changegoods_clicked();void on_pushButton_deletegoods_clicked();void on_pushButton_addpeople_clicked();void on_pushButton_selectpeople_clicked();void on_pushButton_changepeople_clicked();void on_pushButton_deletepeople_clicked();private:Ui::MainWindow *ui;QSqlDatabase db= QSqlDatabase::addDatabase("QMYSQL");QSqlQueryModel *goodsMode;//货物数据模型QSqlQueryModel *peopleMode;//工作人员数据模型};
#endif // MAINWINDOW_H
main.cpp
#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
void sqlconnect(QWidget* parent);
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);goodsMode = new QSqlQueryModel(ui->tableView_goods);peopleMode = new QSqlQueryModel(ui->tableView_people);//绑定sqlconnect(this);}void sqlconnect(QWidget* parent)
{//连接数据库QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");db.setHostName("127.0.0.1");db.setPort(3306);db.setDatabaseName("sqlconnect");//数据库名称db.setUserName("root");//用户名db.setPassword("");//密码qDebug()<<"available drivers:";QStringList drivers = QSqlDatabase::drivers();for(auto driver: drivers)qDebug() << driver;bool ok = db.open();if(ok==0){QMessageBox::information(parent, "提示","数据库连接失败");parent->close();qDebug()<<"数据库连接失败";}//若数据库中没有表,则新建QSqlQuery query;QString createTableGoods="create table if not exists goods(id int primary key auto_increment,name varchar(10),number int, price varchar(10), data varchar(15),server varchar(10),endline int,code varchar(15));";QString createTableWoker="create table if not exists woker(name varchar(10),phonenumber varchar(20), sex varchar(8), age int);";query.exec(createTableGoods);query.exec(createTableWoker);
}MainWindow::~MainWindow()
{delete ui;
}
//___________________________________________________________________________________________________________
void MainWindow::ReshowTable_goods()
{goodsMode->setHeaderData(0,Qt::Horizontal,tr("入库编号"));goodsMode->setHeaderData(1,Qt::Horizontal,tr("名称"));goodsMode->setHeaderData(2,Qt::Horizontal,tr("数量"));goodsMode->setHeaderData(3,Qt::Horizontal,tr("单价"));goodsMode->setHeaderData(4,Qt::Horizontal,tr("生产日期"));goodsMode->setHeaderData(5,Qt::Horizontal,tr("供应商"));goodsMode->setHeaderData(6,Qt::Horizontal,tr("保质期"));goodsMode->setHeaderData(7,Qt::Horizontal,tr("条形码编号"));ui->tableView_goods->setModel(goodsMode);
}void MainWindow::on_move_goods_clicked()
{ui->stackedWidget->setCurrentIndex(0);
}void MainWindow::on_move_people_clicked()
{ui->stackedWidget->setCurrentIndex(1);
}void MainWindow::on_pushButton_addgoods_clicked()
{QString id = ui->lineEdit_goods_id->text();QString name = ui->lineEdit_goods_name->text();QString number = ui->lineEdit_goods_number->text();QString price = ui->lineEdit_goods_price->text();QString data = ui->lineEdit_goods_data->text();QString server = ui->lineEdit_goods_server->text();QString endline = ui->lineEdit_goods_endline->text();QString code = ui->lineEdit_goods_code->text();QSqlQuery query;QString str1 = "" + id +",'"+ name +"'," + number + ",'" +price+"','"+data+"','" +server+"',"+endline+",'"+ code+"'";QString str = "insert into goods(id,name,number,price,data,server,endline,code) values("+ str1 +");";bool success = query.exec(str);if(success){QMessageBox::information(this, "提示","入库成功");}else{QMessageBox::information(this, "提示","入库失败,请检查输入的数据是否正确");}goodsMode->setQuery("select * from goods;");ReshowTable_goods();
}void MainWindow::on_pushButton_selectgoods_clicked()
{goodsMode->setQuery("select * from goods;");ReshowTable_goods();
}void MainWindow::on_pushButton_changegoods_clicked()
{QSqlQuery query;QString str = "update goods set id = '"+ ui->lineEdit_goods_id->text() + "', name='" + ui->lineEdit_goods_name->text()+ "',number='" + ui->lineEdit_goods_number->text() + "',price='" + ui->lineEdit_goods_price->text()+ "',server='" + ui->lineEdit_goods_server->text()+ "',data='" + ui->lineEdit_goods_data->text()+ "',code='" + ui->lineEdit_goods_code->text()+ "',endline='" + ui->lineEdit_goods_endline->text()+ "' where number='" + ui->lineEdit_goods_id->text() + "';";query.exec(str);QMessageBox::information(this, "修改成功", "表信息修改成功");goodsMode->setQuery("select * from goods;");ReshowTable_goods();
}void MainWindow::on_pushButton_deletegoods_clicked()
{QSqlQuery query;int currentrow = ui->tableView_goods->currentIndex().row();goodsMode->removeRow(currentrow);if(currentrow != -1)//若选中一行{int ok = QMessageBox::warning(this,tr("删除当前行!"),tr("你确定删除当前行吗?"), QMessageBox::Yes,QMessageBox::No);//如确认删除if(ok == QMessageBox::Yes){goodsMode->removeRow(currentrow);QString id = goodsMode->data(goodsMode->index(currentrow,0)).toString();//获取idQString del = "delete from goods where id='" + id + "';";query.exec(del);goodsMode->setQuery("select * from goods");ui->tableView_goods->setModel(goodsMode);QMessageBox::information(this, "删除成功", "所选信息删除成功");}}elseQMessageBox::information(this, "提示", "请选择你要删除的信息行");
}//__________________________________________________________________________________________________________________
void MainWindow::ReshowTable_people()
{peopleMode->setHeaderData(0,Qt::Horizontal,tr("姓名"));peopleMode->setHeaderData(1,Qt::Horizontal,tr("性别"));peopleMode->setHeaderData(2,Qt::Horizontal,tr("年龄"));peopleMode->setHeaderData(3,Qt::Horizontal,tr("电话"));ui->tableView_people->setModel(peopleMode);}
void MainWindow::on_pushButton_addpeople_clicked()
{QString name = ui->lineEdit_people_name->text();QString sex = ui->lineEdit_people_sex->text();QString age = ui->lineEdit_people_age->text();QString phonenumber = ui->lineEdit_people_phonenumber->text();QSqlQuery query;QString str1 = "'" + name +"','"+ phonenumber +"','" + sex + "'," +age+"";QString str = "insert into woker(name,phonenumber,sex,age) values("+ str1 +");";bool success = query.exec(str);if(success){QMessageBox::information(this, "提示","增加成功");}else{QMessageBox::information(this, "提示","操作失败,请检查输入的数据是否正确");}goodsMode->setQuery("select * from woker;");ReshowTable_people();
}void MainWindow::on_pushButton_selectpeople_clicked()
{peopleMode->setQuery("select * from woker;");ReshowTable_people();}void MainWindow::on_pushButton_changepeople_clicked()
{QSqlQuery query;QString str = "update goods set name = '"+ ui->lineEdit_people_name->text() + "', sex='" + ui->lineEdit_people_sex->text()+ "',age=" + ui->lineEdit_people_age->text() + ",phonenumber='" + ui->lineEdit_people_phonenumber->text()+ "' where number='" + ui->lineEdit_goods_id->text() + "';";query.exec(str);QMessageBox::information(this, "修改成功", "表信息修改成功");goodsMode->setQuery("select * from woker;");ReshowTable_people();
}void MainWindow::on_pushButton_deletepeople_clicked()
{QSqlQuery query;int currentrow = ui->tableView_people->currentIndex().row();peopleMode->removeRow(currentrow);if(currentrow != -1)//若选中一行{int ok = QMessageBox::warning(this,tr("删除当前行!"),tr("你确定删除当前行吗?"), QMessageBox::Yes,QMessageBox::No);//如确认删除if(ok == QMessageBox::Yes){peopleMode->removeRow(currentrow);QString name = peopleMode->data(peopleMode->index(currentrow,0)).toString();//获取姓名QString del = "delete from woker where name='" + name + "';";query.exec(del);peopleMode->setQuery("select * from woker");ui->tableView_people->setModel(peopleMode);QMessageBox::information(this, "删除成功", "所选信息删除成功");}}elseQMessageBox::information(this, "提示", "请选择你要删除的信息行");
}
连接本地mysql,如果要在别的地方运行,要有mysql的环境
相关文章:
Qt——连接mysql增删查改(仓库管理极简版)
目录 UI布局设计 .pro文件 mainwindow.h main.cpp UI布局设计 .pro文件 QT core gui QT core gui sql QT sqlgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any …...
Panda3d 场景管理
Panda3d 场景管理 文章目录 Panda3d 场景管理有关分层场景图的重要信息NodePathNodePath 以及 Node 的函数调用模型文件文件格式加载模型文件将模型放置在场景图中模型缓存压缩模型异步加载模型通过回调函数进行 常见的状态变化修改节点的位置和姿态改变父级节点改变颜色隐藏和…...
京东数据分析(京东销量):2023年9月京东投影机行业品牌销售排行榜
鲸参谋监测的京东平台9月份投影机市场销售数据已出炉! 根据鲸参谋电商数据分析平台的相关数据数据显示,9月份,京东平台投影机的销量为13万,环比下滑约17%,同比下滑约25%;销售额将近2.6亿,环比下…...
uniapp cli化一键游项目启动报错总结
问题1、使用hbuilder运行指令,开始编译后没有反应,使用命令构建自行结束进程 解决:因为使用了node16.24,卸载重新安装14.17后解决 问题2、 21:31:11.483 Module build failed (from ./node_modules/vue/cli-service/node_module…...
我的月光宝盒初体验失败了
哈哈哈,我爱docker, docker 使我自由!!! docker make me free! 菠萝菠萝蜜口号喊起来。 https://github.com/vivo/MoonBox/ windows上安装好了docker之后,docker-compose是自带的。 docker-compose -f docker-compo…...
vue3+vite搭建后台项目-1 引入element-plus 中文包,打包时报错问题
vue3vite搭建后台项目-1 引入element-plus 中文包,打包时报错问题 终端报错 If theelement-pluspackage actually exposes this module, try adding a new declaration (.d.ts) file containing are moduleelement-plus/dist/locale/zh-cn.mjsdec import zhCn fromelement-plus…...
带你详细了解git的【分支和标签】
🏅我是默,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《git》。🎯🎯 🚀无论你是编程小白,还是有一定基础的程序员,…...
分类预测 | Matlab实现PSO-LSTM粒子群算法优化长短期记忆神经网络的数据多输入分类预测
分类预测 | Matlab实现PSO-LSTM粒子群算法优化长短期记忆神经网络的数据多输入分类预测 目录 分类预测 | Matlab实现PSO-LSTM粒子群算法优化长短期记忆神经网络的数据多输入分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现PSO-LSTM粒子群算法优化长短…...
Spring 事务失效的场景
1.直接new出来的对象添加事务不起作用,因为只有spring定义的bean才接受事务。 2.由于mysql的引擎用Myisam不支持事务,所以如果使用mysql的myisam引擎的话,事务不起作用。 3.如果Transaction注解到非public方法上,事务不起作用&…...
酷柚易汛ERP-自定义打印整体介绍
1、产品介绍 每种单据系统预设常用模板,提供A4纸张、三等分、二等分,销货单额外提供80mm、58mm供用户选择;每张单据可设置一个默认模板和多个常用模;除默认模板外,其他模板都允许删除,用户可以根据公司业务…...
activiti命令模式与责任链模式
来源:activiti学习(七)——命令模式和职责链模式在activiti中的应用 文章目录 设计模式命令模式CommandHelloCommandByeCommand ReceiverInvokerClient 职责链模式AbstractHandlerConcreteHandlerAConcreateHandlerB Client activiti中很多ap…...
C++20 Text formatting
C20 Text formatting 格式化字符串, 和 python 类似。 std::formatter - cppreference.com string — Common string operations — Python 3.12.0 documentation 新格式库位于 <format> 头文件中。格式库基于 Python3 中的 str.format() 方法建模。格式…...
redis-plus-plus--github中文翻译--2
12 能不能举个例子 当然可以。以下是一个具体的例子,说明如何使用cmake命令为redis-plus-plus配置编译和安装路径: 假设: hiredis 被安装在 /opt/libs/hiredis你想要将 redis-plus-plus 安装到 /opt/libs/redis-plus-plus那么,你可以使用以下的 cmake 命令: cmake -DCM…...
Vuex状态管理:Getters :VOA模式
简介: Getters 用于对 Store 中的数据进行加工处理形成新的数据。 Getters 可以对 Store 中已有的数据加工处理之后形成新的数据,类似 Vue 的计算属性。 Store 中数据发生变化,Getters 的数据也会跟着变化。 案列 /src/store/index.js状态…...
二十三种设计模式全面解析-享元模式(Flyweight Pattern)详解:构建高效共享的对象结构
在软件开发中,我们经常会面临大量相似对象的创建和管理问题。这些相似对象的创建和销毁过程可能会占用大量的内存和系统资源,导致性能下降。为了解决这个问题,享元模式(Flyweight Pattern)应运而生。本文将深入探讨享元…...
华为ensp:交换机接口划分vlan
现在要把 e0/0/1 接口放入vlan1 e0/0/2 接口放入vlan2 e0/0/3 接口放入vlan3 默认所有接口都在vlan1所以 e0/0/0 接口不用动 1.创建vlan 进入系统视图模式 直接输入 vlan 编号 即可创建对应vlan vlan 编号 vlan 2 创建vlan2 vlan 3 创建vlan3 2.将接口进入vlan…...
PCBA表面污染的分类及处理方法
NO.1 引言 在PCBA生产过程中,锡膏和助焊剂会产生残留物质,残留物中包含的有机酸和电离子,前者易腐蚀PCBA,后者会造成焊盘间短路故障。且近年来,用户对产品的清洁度要求越来越严格,PCBA清洗工艺逐渐被电子组…...
Linux开发工具之编辑器vim
文章目录 1.vim是啥?1.1问问度娘1.2自己总结 2.vim的初步了解2.1进入和退出2.2vim的模式1.介绍2.使用 3.vim的配置3.1自己配置3.2下载插件3.3安装大佬配置好的文件 4.程序的翻译 1.vim是啥? 1.1问问度娘 1.2自己总结 vi/vim都是多模式编辑器,vim是vi的升级版本&a…...
【Hadoop实战】Hadoop指标系统V2分析
Hadoop指标系统V2分析 文章目录 Hadoop指标系统V2分析架构主要组成部分根据图表解释数据流向指标过滤JMX的应用开启指标系统的组件指标项说明 使用HTTP(JMXJsonServlet)获取指标接口调用方式GET查询的逻辑数据的来源,以及更新的原理 架构 在…...
【java:牛客每日三十题总结-5】
java:牛客每日三十题总结 总结如下 总结如下 -Xmx:最大堆大小 -Xms:初始堆大小 -Xmn:年轻代大小 -XXSurvivorRatio:年轻代中Eden区与Survivor区的大小比值 年轻代5120m, Eden:Survivor3,Survivor区大小102…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...
