当前位置: 首页 > news >正文

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月份投影机市场销售数据已出炉&#xff01; 根据鲸参谋电商数据分析平台的相关数据数据显示&#xff0c;9月份&#xff0c;京东平台投影机的销量为13万&#xff0c;环比下滑约17%&#xff0c;同比下滑约25%&#xff1b;销售额将近2.6亿&#xff0c;环比下…...

uniapp cli化一键游项目启动报错总结

问题1、使用hbuilder运行指令&#xff0c;开始编译后没有反应&#xff0c;使用命令构建自行结束进程 解决&#xff1a;因为使用了node16.24&#xff0c;卸载重新安装14.17后解决 问题2、 21:31:11.483 Module build failed (from ./node_modules/vue/cli-service/node_module…...

我的月光宝盒初体验失败了

哈哈哈&#xff0c;我爱docker, docker 使我自由&#xff01;&#xff01;&#xff01; docker make me free! 菠萝菠萝蜜口号喊起来。 https://github.com/vivo/MoonBox/ windows上安装好了docker之后&#xff0c;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的【分支和标签】

&#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《git》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一定基础的程序员&#xff0c;…...

分类预测 | Matlab实现PSO-LSTM粒子群算法优化长短期记忆神经网络的数据多输入分类预测

分类预测 | Matlab实现PSO-LSTM粒子群算法优化长短期记忆神经网络的数据多输入分类预测 目录 分类预测 | Matlab实现PSO-LSTM粒子群算法优化长短期记忆神经网络的数据多输入分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现PSO-LSTM粒子群算法优化长短…...

Spring 事务失效的场景

1.直接new出来的对象添加事务不起作用&#xff0c;因为只有spring定义的bean才接受事务。 2.由于mysql的引擎用Myisam不支持事务&#xff0c;所以如果使用mysql的myisam引擎的话&#xff0c;事务不起作用。 3.如果Transaction注解到非public方法上&#xff0c;事务不起作用&…...

酷柚易汛ERP-自定义打印整体介绍

1、产品介绍 每种单据系统预设常用模板&#xff0c;提供A4纸张、三等分、二等分&#xff0c;销货单额外提供80mm、58mm供用户选择&#xff1b;每张单据可设置一个默认模板和多个常用模&#xff1b;除默认模板外&#xff0c;其他模板都允许删除&#xff0c;用户可以根据公司业务…...

activiti命令模式与责任链模式

来源&#xff1a;activiti学习&#xff08;七&#xff09;——命令模式和职责链模式在activiti中的应用 文章目录 设计模式命令模式CommandHelloCommandByeCommand ReceiverInvokerClient 职责链模式AbstractHandlerConcreteHandlerAConcreateHandlerB Client activiti中很多ap…...

C++20 Text formatting

C20 Text formatting 格式化字符串&#xff0c; 和 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模式

简介&#xff1a; Getters 用于对 Store 中的数据进行加工处理形成新的数据。 Getters 可以对 Store 中已有的数据加工处理之后形成新的数据&#xff0c;类似 Vue 的计算属性。 Store 中数据发生变化&#xff0c;Getters 的数据也会跟着变化。 案列 /src/store/index.js状态…...

二十三种设计模式全面解析-享元模式(Flyweight Pattern)详解:构建高效共享的对象结构

在软件开发中&#xff0c;我们经常会面临大量相似对象的创建和管理问题。这些相似对象的创建和销毁过程可能会占用大量的内存和系统资源&#xff0c;导致性能下降。为了解决这个问题&#xff0c;享元模式&#xff08;Flyweight Pattern&#xff09;应运而生。本文将深入探讨享元…...

华为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生产过程中&#xff0c;锡膏和助焊剂会产生残留物质&#xff0c;残留物中包含的有机酸和电离子&#xff0c;前者易腐蚀PCBA&#xff0c;后者会造成焊盘间短路故障。且近年来&#xff0c;用户对产品的清洁度要求越来越严格&#xff0c;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都是多模式编辑器&#xff0c;vim是vi的升级版本&a…...

【Hadoop实战】Hadoop指标系统V2分析

Hadoop指标系统V2分析 文章目录 Hadoop指标系统V2分析架构主要组成部分根据图表解释数据流向指标过滤JMX的应用开启指标系统的组件指标项说明 使用HTTP&#xff08;JMXJsonServlet&#xff09;获取指标接口调用方式GET查询的逻辑数据的来源&#xff0c;以及更新的原理 架构 在…...

【java:牛客每日三十题总结-5】

java:牛客每日三十题总结 总结如下 总结如下 -Xmx&#xff1a;最大堆大小 -Xms&#xff1a;初始堆大小 -Xmn:年轻代大小 -XXSurvivorRatio&#xff1a;年轻代中Eden区与Survivor区的大小比值 年轻代5120m&#xff0c; Eden&#xff1a;Survivor3&#xff0c;Survivor区大小102…...

Android车机蓝牙开发避坑指南:如何正确配置A2DP Sink与HFP Client模式(附源码修改点)

Android车机蓝牙音频接收端开发实战&#xff1a;A2DP Sink与HFP Client模式深度配置 在智能座舱和车载娱乐系统快速发展的今天&#xff0c;蓝牙音频接收功能已成为车机系统的标配能力。不同于手机作为音源端的常规场景&#xff0c;车机需要作为接收端&#xff08;Sink&#xff…...

探究python-docx的段落缩进——从字体磅值到精准首行缩进

1. 为什么你的首行缩进总是不准确&#xff1f; 很多开发者第一次用python-docx处理段落缩进时&#xff0c;都会遇到这样的困惑&#xff1a;明明设置了固定缩进值&#xff08;比如0.74厘米&#xff09;&#xff0c;为什么在不同文档里效果天差地别&#xff1f;这个问题我当年也踩…...

CefFlashBrowser完整指南:在2025年完美运行Flash内容的终极解决方案

CefFlashBrowser完整指南&#xff1a;在2025年完美运行Flash内容的终极解决方案 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 你是否还记得那些经典的Flash游戏和互动课件&#xff1f;当…...

面试官:爆火视频点赞每秒 10w,数据库行锁直接卡死,你怎么破?

最近有个兄弟去面某短视频大厂&#xff0c;前面的架构设计聊得挺嗨&#xff0c;结果面试官最后抛出一个看似简单的“点赞”题&#xff0c;直接把他问到了自闭。 面试官&#xff1a; “现在有个爆火视频&#xff0c;比如春晚刘谦变魔术&#xff0c;一秒钟有 10 万人同时点赞。你…...

代码生成准确率提升67%的秘密:可视化反馈闭环如何重构IDE开发范式,你还在盲写Prompt?

第一章&#xff1a;代码生成准确率提升67%的秘密&#xff1a;可视化反馈闭环如何重构IDE开发范式&#xff0c;你还在盲写Prompt&#xff1f; 2026奇点智能技术大会(https://ml-summit.org) 传统AI编程助手依赖单向Prompt输入与静态代码输出&#xff0c;开发者无法实时感知模型…...

终极清净体验:3步告别Windows音量弹窗干扰的完整指南

终极清净体验&#xff1a;3步告别Windows音量弹窗干扰的完整指南 【免费下载链接】HideVolumeOSD Hide the Windows 10 volume bar 项目地址: https://gitcode.com/gh_mirrors/hi/HideVolumeOSD 开篇引子&#xff1a;那个总是在关键时刻跳出来的"不速之客" 想…...

ElasticSearch 基础入门与 .NET 集成实践总结

ElasticSearch 简介 Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解&#xff0c;并管理和监控堆栈。 Elasticse…...

贾子元稳定性定理(Kucius Meta-——贾子逆算子(Kucius Inverse Operator, KIO):TMM中的反规则算子(Inverse Rule Operator)定义、实现与应用

贾子元稳定性定理&#xff08;Kucius Meta-——贾子逆算子&#xff08;Kucius Inverse Operator, KIO&#xff09;&#xff1a;TMM中的反规则算子&#xff08;Inverse Rule Operator&#xff09;定义、实现与应用把“逆向能力”从评价指标 → 生成机制 → 推理算子。以下是可嵌…...

手把手教你用Keras搭建Seq2Seq LSTM模型:以航空公司乘客数据预测为例

从零构建Seq2Seq LSTM模型&#xff1a;航空乘客预测的工程实践 当我们需要预测未来三个月航空公司的乘客数量时&#xff0c;传统的时间序列分析方法往往捉襟见肘。这正是Seq2Seq LSTM模型大显身手的场景——它能够捕捉长期依赖关系&#xff0c;实现端到端的多步预测。不同于简单…...

从零解析AlexNet:逐层维度推导与PyTorch实战复现

1. AlexNet的前世今生&#xff1a;为什么它改变了计算机视觉 第一次看到AlexNet的论文时&#xff0c;我正坐在实验室的旧电脑前啃着三明治。那是2012年的一个普通下午&#xff0c;谁也没想到这篇论文会成为深度学习革命的导火索。当时主流的图像识别方法还在用SIFT特征SVM分类器…...