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…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
