Qt——连接mysql增删查改(仓库管理极简版)

news2025/1/17 6:15:53

目录

UI布局设计

.pro文件

 mainwindow.h

main.cpp


UI布局设计

.pro文件

QT       += core gui
QT       += core gui sql
QT       += sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += 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.0

SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    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_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    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();//获取id
            QString del = "delete from goods where id='" + id + "';";
            query.exec(del);
            goodsMode->setQuery("select * from goods");
            ui->tableView_goods->setModel(goodsMode);
            QMessageBox::information(this, "删除成功", "所选信息删除成功");
        }
    }
    else
        QMessageBox::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, "删除成功", "所选信息删除成功");
        }
    }
    else
        QMessageBox::information(this, "提示", "请选择你要删除的信息行");
}

连接本地mysql,如果要在别的地方运行,要有mysql的环境

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言数据结构-----链表类型详解及链表练习题

0.前言 之前我讲解了循序表以及单链表&#xff0c;接下来我会在介绍几个不同的链表&#xff0c;并举例相关习题使大家能够更加深入的理解。 前期内容如下&#xff1a; 链接: 顺序表(动态顺序表增删查改的代码实现) 链接: 单链表(无头单向不循环)增删查改的代码实现 链接: [双向…

带你详细了解git的【分支和标签】

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

使用xlwings实现对excel表中指定列隔行求和

需要对上表中的营业额隔行求和&#xff0c;即橙色背景颜色的求和&#xff0c;无背景颜色的求和。 看了大佬的视频&#xff0c;有两种方法&#xff1a; 1.加辅助列 2.使用判断行的奇偶函数&#xff0c;然后在用sumproduct函数 在此&#xff0c;我使用xlwings对excel表中数据…

来世再不选Java!

危机感 距离上一次找工作面试已经过去快2年了&#xff0c;那时候正值疫情肆虐&#xff0c;虽然还未感受到“寒潮来临”的苗头&#xff0c;但最终还是成功通过了几轮面试&#xff0c;顺利签约。在目前公司待了2年了&#xff0c;在大环境的影响下&#xff0c;没有加薪、没有年终…

经典OJ题:奇偶链表

目录 题目&#xff1a; 示例&#xff1a; 解题思路&#xff1a; 方法一&#xff1a;双链表链接法 图例&#xff1a; 代码演示&#xff1a; 解题效果&#xff1a; 方法二&#xff1a;奇偶指针 图例&#xff1a; 代码演示&#xff1a; 题目&#xff1a; 给定单链表…

vmware开启ipv6

说明 在 ipv4 基础上配置ipv6网络。 分享 大数据博客列表开发记录汇总个人java工具库 项目https://gitee.com/wangzonghui/object-tool 包含json、string、集合、excel、zip压缩、pdf、bytes、http等多种工具&#xff0c;欢迎使用。 vm开启ipv6 设置vmware 打开vmware点击编…

第二章 03Java基础-IDEA相关叙述

文章目录 前言一、IDEA概述二、IDEA下载和安装三、IDEA项目结构介绍四、IDEA的项目和模块操作总结前言 今天我们学习Java基础,IDEA下载以及相关配置和基础使用方法 一、IDEA概述 1.IDEA全称IntelliJ IDEA,是用于Java语言开发的集成工具,是业界公认的目前用于Java程序开发最…

“茶叶销售策略:以‘3人回本大放送’模式引领快速流量裂变“

你是否曾经为茶叶的高品质而烦恼&#xff1f;是否曾经为挑选一款适合自己的茶叶而纠结&#xff1f;现在&#xff0c;有一个销售茶叶的团队&#xff0c;他们家599块钱一盒的茶叶&#xff0c;让你轻松品味高端的滋味。他们在小程序这一个渠道&#xff0c;只用了23天的时间&#x…

MYSQL 慢查询和慢查询日志

在数据库管理中&#xff0c;慢查询是指执行时间较长的 SQL 查询语句。这类查询可能导致系统性能下降&#xff0c;影响用户体验。为了帮助识别和解决这些性能问题&#xff0c;数据库管理系统通常提供了慢查询日志&#xff0c;用于记录执行时间超过一定阈值的查询。本文将深入探讨…

计算机视觉:使用opencv进行直线检测

1 直线检测介绍 在图像处理中&#xff0c;直线检测是一种常见的算法&#xff0c;它通常获取n个边缘点的集合&#xff0c;并找到通过这些边缘点的直线。其中用于直线检测&#xff0c;最为流行的检测器是基于霍夫变换的直线检测技术。 1.1 什么是霍夫变换 霍夫变换&#xff08…

Ribbon 负载均衡原理和策略

目录 一、Ribbon 是什么 二、Ribbon 负载均衡原理 三、Ribbon 负载均衡策略 四、Ribbon的应用场景 一、Ribbon 是什么 Ribbon是一个开源的、基于HTTP和TCP的客户端负载均衡工具&#xff0c;它提供了一个简单的、基于配置的负载均衡策略&#xff0c;可以帮助开发人员更轻松…

R系组播调优方案

修改/etc/sysctl.conf添加如下内容&#xff1a; Vim /etc/sysctl.con net.ipv4.ip_forward1 net.ipv4.ip_nonlocal_bind1 net.ipv4.conf.all.rp_filter0 net.ipv4.conf.default.rp_filter0 net.bridge.bridge-nf-call-arptables 0 net.bridge.bridge-nf-call-ip6tables 0 …

ChatGLM3 langchain_demo 代码解析

ChatGLM3 langchain_demo 代码解析 0. 背景1. 项目代码结构2. 代码解析2-1. utils.py2-2. ChatGLM3.py2-3. Tool/Calculator.py2-4. Tool/Weather.py2-5. main.py 0. 背景 学习 ChatGLM3 的项目内容&#xff0c;过程中使用 AI 代码工具&#xff0c;对代码进行解释&#xff0c;…

uniapp——项目02

分类 创建cate分支 渲染分类页面的基本结构 效果页面,包含左右两个滑动区. 利用提供的api获取当前设备的信息。用来计算窗口高度。可食用高度就是屏幕高度减去上下导航栏的高度。 最终效果: 每一个激活项都特殊背景色&#xff0c;又在尾部加了个红条一样的东西。 export d…

运动耳机推荐,运动耳机哪个牌子好性价比高?哪个运动耳机好?

​无论你是喜欢户外跑步&#xff0c;还是喜欢室内健身&#xff0c;运动耳机都能为你提供强大的音乐动力&#xff0c;帮助你更好地享受运动的过程&#xff0c;边流汗边听歌太畅快了&#xff01;因此。想了解哪个品牌的运动耳机更适合自己&#xff0c;就来看看我发布的这篇文章吧…

Python 使用tkinter的Text文本域实时显示光标位置

在Python tkinter中&#xff0c;可以使用Text widget的index()方法来获取实时光标的行和列。该方法接受一个字符串参数&#xff0c;用于指定要获取的索引位置&#xff0c;例如"insert"表示当前光标位置。 重难点&#xff1a;想要获取准确的光标位置&#xff0c;需要…

ffmpeg安装教程(windows、Linux下python环境)

本文旨在向大家介绍ffmpeg在Windows和Linux系统中的安装方法。 目录 一、Windows 安装 ffmpeg1.1 官网下载 ffmpeg 运行程序1.2 环境配置1.3 测试 二、Linux 安装ffmpeg2.1 Linux中安装ffmpeg2.2 python环境安装 ffmpeg2.1.1 为什么要介绍这个2.1.1 成功安装示例 一、Windows …

【Linux】语言层面缓冲区的刷新问题以及简易模拟实现

文章目录 前言一、缓冲区刷新方法分类a.无缓冲--直接刷新b.行缓冲--不刷新&#xff0c;直到碰到\n才刷新c.全缓冲--缓冲区满了才刷新 二、 缓冲区的常见刷新问题1.问题2.刷新本质 三、模拟实现1.Mystdio.h2.Mystdio.c3.main.c 前言 我们接下来要谈论的是我们语言层面的缓冲区&…

【扩散模型】万字长文全面理解与应用Stable Diffusion

万字长文全面理解与应用Stable Diffusion 1. Stable Diffusion简介1.1 基本概念1.2 主体结构1.3 训练细节1.4 模型评测1.5 模型应用1.6 模型版本1.7 其他类型的条件生成模型1.8 使用DreamBooth进行微调 2. 实战Stable Diffusion2.1 环境准备2.2 从文本生成图像2.3 Stable Diffu…

GPT4 Turbo 究竟更新了什么

GPT4 Turbo 究竟更新了什么 记忆力和上下文理解能力增强 现在的GPT4可以理解128K的文本&#xff0c;相当于几百页的内容&#xff0c;你的GPT4再也不会忘记你之前说的什么了&#xff0c;换句话说之前他只能记住一篇文章&#xff0c;而现在可以记住一整本书的内容了 API降价 输入…