qt实现仓库物料管理(小工具)

最近不怎么忙,使用qt实现了一个简易的仓库管理物料信息,基本上的功能就是添加库存,删除库存。
添加新物料,还有明确知道出库时间和入库时间,以及操作员是谁(这个我默认写死,需要的可以自己加一下)
先看效果图:
在这里插入图片描述
入库可以增加已经存在的物料的数量,出库同入库一样。新增物料可以增加表格中不存在的。右击可以进行删除选中的物料
直接看代码:
.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QTableWidget>
#include <QDialog>
#include <QLineEdit>
#include <QComboBox>
#include <QMenu>
#include <QAction>

#pragma execution_character_set("utf-8")

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    void Init();
    void Readstock();

private:
    void WriteFile();

    void SetTableWgtAligment();

    void CreateMenu();

protected slots:
    void onAddThings();
    void onAddClicked();

    void onTableContextMenuClicked();

    void onInputClicked();

    void oninputAddClicked();

    void onOutPutClicked();

    void onoutPutBtnClicked();

    void onDeleteClicked();

private:
    QPushButton *m_pInputBtn=nullptr;
    QPushButton *m_pOutPutBtn=nullptr;
    QPushButton *m_pAddThingBtn=nullptr;

    QMenu *m_pMenu = nullptr;

    QTableWidget *m_pTableWgt=nullptr;
    QStringList m_NameList;

    QDialog *m_pAddDialog=nullptr;
    QLineEdit *m_pAddNameEdit=nullptr;
    QLineEdit *m_pAddCountEdit=nullptr;

    QDialog *m_pInputDialog=nullptr;
    QComboBox *m_pInputComboBox=nullptr;
    QLineEdit *m_pInputCountEdit=nullptr;

    QDialog *m_poutputDialog=nullptr;
    QComboBox *m_poutputComboBox=nullptr;
    QLineEdit *m_poutputCountEdit=nullptr;
};
#endif // WIDGET_H

.cpp

#include "widget.h"
#include <QVBoxLayout>
#include <QHeaderView>
#include <QIntValidator>
#include <QMessageBox>
#include <QDateTime>
#include <QFile>
#include <QTextStream>
#include <qdebug.h>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    this->resize(800,600);
    this->setWindowTitle(tr("库存管理"));
    Init();

    Readstock();

    CreateMenu();


}

Widget::~Widget()
{
}

void Widget::Init()
{
    m_pInputBtn=new QPushButton(tr("入库"),this);
    m_pOutPutBtn=new QPushButton(tr("出库"),this);
    m_pAddThingBtn=new QPushButton(tr("新增物料"),this);

    m_pInputBtn->setStyleSheet("background:rgb(60,200,169);color:white;border-radius:3px");
    m_pOutPutBtn->setStyleSheet("background:rgb(60,200,169);color:white;border-radius:3px");
    m_pAddThingBtn->setStyleSheet("background:rgb(60,200,169);color:white;border-radius:3px");

    m_pInputBtn->setFixedSize(120, 28);
    m_pOutPutBtn->setFixedSize(120, 28);
    m_pAddThingBtn->setFixedSize(120, 28);

    m_pTableWgt=new QTableWidget(this);
    m_pTableWgt->setColumnCount(5);
    QStringList tableHeadList;
    tableHeadList<<QString("物料名称")<<QString("数量")<<QString("最后一次出库时间")<<QString("最后一次入库时间")<<QString("操作员");
    m_pTableWgt->setHorizontalHeaderLabels(tableHeadList);
    m_pTableWgt->setSelectionBehavior(QAbstractItemView::SelectRows);
    m_pTableWgt->setContextMenuPolicy(Qt::CustomContextMenu);
    connect(m_pTableWgt, &QTableWidget::customContextMenuRequested, this, &Widget::onTableContextMenuClicked);

    m_pTableWgt->setAlternatingRowColors(true);
    m_pTableWgt->horizontalHeader()->setStretchLastSection(true);
    m_pTableWgt->setShowGrid(false);
    m_pTableWgt->horizontalHeader()->setStyleSheet("QHeaderView::section {background-color:qlineargradient(x1:0, y1:0, x2:0, y2:1,\
                                                         stop:0 rgba(69,133,245,38), stop: 0.5 rgba(69,133,245,38),stop: 0.6 rgba(69,133,245,38), stop:1 rgba(69,133,245,38));color: black;border:1px solid rgba(69,133,245,38)}");     //border:1px solid rgba(153,153,153,51)
    m_pTableWgt->horizontalHeader()->setFixedHeight(45);
    m_pTableWgt->setStyleSheet("border:1px solid rgba(153,153,153,51)");
    m_pTableWgt->setStyleSheet("QTableCornerButton::section{ background:white; }"
        "QTableWidget{alternate-background-color:rgba(69,133,245,38);background:rgba(240,240,240,38)}");


    QHBoxLayout *btnLayout=new QHBoxLayout(this);
    QWidget *btnWgt=new QWidget(this);
    btnLayout->addWidget(m_pInputBtn);
    btnLayout->addWidget(m_pOutPutBtn);
    btnLayout->addWidget(m_pAddThingBtn);
    btnLayout->setMargin(10);
    btnLayout->setSpacing(5);
    btnWgt->setLayout(btnLayout);
    btnWgt->setFixedHeight(40);

    QVBoxLayout *mainLayout=new QVBoxLayout(this);
    mainLayout->addWidget(btnWgt);
    mainLayout->addWidget(m_pTableWgt);
    mainLayout->setMargin(0);
    mainLayout->setSpacing(0);
    this->setLayout(mainLayout);

    connect(m_pAddThingBtn,&QPushButton::clicked,this,&Widget::onAddThings);
    connect(m_pInputBtn,&QPushButton::clicked,this,&Widget::onInputClicked);
    connect(m_pOutPutBtn,&QPushButton::clicked,this,&Widget::onOutPutClicked);


}

void Widget::Readstock()
{
     QFile file("material.txt");
     if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
         return;

     while (!file.atEnd()) {
         QString line = file.readLine();
         QStringList strList=line.split("|");
         if(strList.size()>=5)
         {
             int rowCount=m_pTableWgt->rowCount();
             m_pTableWgt->setRowCount(rowCount+1);

             m_NameList.append(strList[0]);
             QTableWidgetItem *nameItem=new QTableWidgetItem(strList[0]);
             QTableWidgetItem *countItem=new QTableWidgetItem(strList[1]);
             QTableWidgetItem *startTimeItem=new QTableWidgetItem(strList[2]);
             QTableWidgetItem *endTimeItem=new QTableWidgetItem(strList[3]);
             QTableWidgetItem *userItem=new QTableWidgetItem(strList[4]);

             m_pTableWgt->setItem(rowCount,0,nameItem);
             m_pTableWgt->setItem(rowCount,1,countItem);
             m_pTableWgt->setItem(rowCount,2,startTimeItem);
             m_pTableWgt->setItem(rowCount,3,endTimeItem);
             m_pTableWgt->setItem(rowCount,4,userItem);
         }
     }
     file.close();
     SetTableWgtAligment();
}

void Widget::WriteFile()
{
    QFile file("material.txt");
    if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
        return;
    QTextStream out(&file);
    out.setCodec("utf-8");

    int rowCount=m_pTableWgt->rowCount();
    for(int i=0;i<rowCount;++i)
    {
        QString strName=m_pTableWgt->item(i,0)->text();
        QString strCount=m_pTableWgt->item(i,1)->text();
        QString strStartTime=m_pTableWgt->item(i,2)->text();
        QString strEndTime=m_pTableWgt->item(i,3)->text();
        QString user=m_pTableWgt->item(i,4)->text();
        QString strText=strName+"|"+strCount+"|"+strStartTime+"|"+strEndTime+"|"+user;
        out << strText<< "\n";
    }
    file.close();
}

void Widget::SetTableWgtAligment()
{
    for (int i = 0; i < m_pTableWgt->rowCount(); i++)
    {
        for (int j = 0; j < m_pTableWgt->columnCount(); j++)
        {
            m_pTableWgt->item(i,j)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
        }
    }
    m_pTableWgt->resizeColumnsToContents();
}

void Widget::CreateMenu()
{
    m_pMenu = new QMenu(this);
    QAction *deleteAction = new QAction(tr("Delete..."), this);
    connect(deleteAction,&QAction::triggered,this,&Widget::onDeleteClicked);
    m_pMenu->addAction(deleteAction);
    m_pMenu->hide();
}

void Widget::onAddThings()
{
    QFont textFont;
    textFont.setPointSize(10);
    textFont.setFamily("Microsoft YaHei");
    m_pAddDialog=new QDialog();
    m_pAddDialog->setWindowTitle(tr("新增物料"));
    m_pAddNameEdit=new QLineEdit(m_pAddDialog);
    m_pAddCountEdit=new QLineEdit(m_pAddDialog);
    QLabel *nameLabel=new QLabel(tr("Name"),m_pAddDialog);
    QLabel *CountLabel=new QLabel(tr("Count"),m_pAddDialog);

    m_pAddCountEdit->setValidator(new QIntValidator());


    m_pAddNameEdit->setFixedSize(200,28);
    m_pAddCountEdit->setFixedSize(200,28);

    nameLabel->setFixedWidth(100);
    CountLabel->setFixedWidth(100);

    m_pAddNameEdit->setFont(textFont);
    m_pAddCountEdit->setFont(textFont);
    nameLabel->setFont(textFont);
    CountLabel->setFont(textFont);

    QPushButton *addBtn=new QPushButton(tr("增加"),m_pAddDialog);
    addBtn->setFixedSize(120,28);
    addBtn->setFont(textFont);

    QHBoxLayout *addLayout=new QHBoxLayout(m_pAddDialog);
    addLayout->addWidget(nameLabel);
    addLayout->addWidget(m_pAddNameEdit);
    addLayout->addWidget(CountLabel);
    addLayout->addWidget(m_pAddCountEdit);
    addLayout->addWidget(addBtn);
    addLayout->setMargin(20);
    addLayout->setSpacing(5);
    m_pAddDialog->setLayout(addLayout);
    m_pAddDialog->hide();

    connect(addBtn,&QPushButton::clicked,this,&Widget::onAddClicked);

    m_pAddDialog->exec();
}

void Widget::onAddClicked()
{
    QString strName=m_pAddNameEdit->text();
    QString strCount=m_pAddCountEdit->text();
    if(!m_NameList.contains(strName))
    {
        m_NameList.append(strName);
        int rowCount=m_pTableWgt->rowCount();
        m_pTableWgt->setRowCount(rowCount+1);
        QString user="用户";

        QTableWidgetItem *nameItem=new QTableWidgetItem(strName);
        QTableWidgetItem *countItem=new QTableWidgetItem(strCount);
        QDateTime dateTime=QDateTime::currentDateTime();
        QString strTime=dateTime.toString("yyyy-MM-dd hh:mm:ss");
        QTableWidgetItem *startTimeItem=new QTableWidgetItem(strTime);
        QTableWidgetItem *endTimeItem=new QTableWidgetItem(strTime);
        QTableWidgetItem *userItem=new QTableWidgetItem(user);

        m_pTableWgt->setItem(rowCount,0,nameItem);
        m_pTableWgt->setItem(rowCount,1,countItem);
        m_pTableWgt->setItem(rowCount,2,startTimeItem);
        m_pTableWgt->setItem(rowCount,3,endTimeItem);
        m_pTableWgt->setItem(rowCount,4,userItem);

        SetTableWgtAligment();
        WriteFile();
    }
    else
    {
        QMessageBox::information(m_pAddDialog,"提示信息","物料已经存在,请勿重复添加");
    }

}

void Widget::onTableContextMenuClicked()
{
    m_pMenu->setStyleSheet("QMenu{background:white;border: 1px solid rgb(153,153,153);}"
                "QMenu::item:selected{background-color:rgb(69,133,245);}");
            m_pMenu->move(QCursor::pos().x(), QCursor::pos().y());
            m_pMenu->show();
}

void Widget::onInputClicked()
{
    QFont textFont;
    textFont.setPointSize(10);
    textFont.setFamily("Microsoft YaHei");
    m_pInputDialog=new QDialog();
    m_pInputComboBox=new QComboBox(m_pInputDialog);
    m_pInputCountEdit=new QLineEdit(m_pInputDialog);
    m_pInputCountEdit->setValidator(new QIntValidator);
    QPushButton *inputAddBtn=new QPushButton(tr("入库"));
    QLabel *nameLabel=new QLabel(tr("物料名称"),m_pInputDialog);
    QLabel *countLabel=new QLabel(tr("入库数量"),m_pInputDialog);

    m_pInputComboBox->setFixedSize(200,28);
    m_pInputCountEdit->setFixedSize(200,28);

    nameLabel->setFixedWidth(100);
    countLabel->setFixedWidth(100);

    inputAddBtn->setFixedSize(120,27);
    inputAddBtn->setFont(textFont);

    m_pInputComboBox->setFont(textFont);
    m_pInputCountEdit->setFont(textFont);
    nameLabel->setFont(textFont);
    countLabel->setFont(textFont);
    QGridLayout *inputLayout=new QGridLayout(m_pInputDialog);
    inputLayout->addWidget(nameLabel,0,0);
    inputLayout->addWidget(m_pInputComboBox,0,1);
    inputLayout->addWidget(countLabel,1,0);
    inputLayout->addWidget(m_pInputCountEdit,1,1);
    inputLayout->addWidget(inputAddBtn,2,1);
    inputLayout->setMargin(20);
    inputLayout->setSpacing(5);
    m_pInputDialog->setLayout(inputLayout);


    int rowCount=m_pTableWgt->rowCount();
    for(int i=0;i<rowCount;++i)
    {
        m_pInputComboBox->addItem(m_pTableWgt->item(i,0)->text());
    }

    m_pInputComboBox->setEditable(true);

    connect(inputAddBtn,&QPushButton::clicked,this,&Widget::oninputAddClicked);

    m_pInputDialog->exec();
}

void Widget::oninputAddClicked()
{
    QString strName=m_pInputComboBox->currentText();
    if(m_NameList.contains(strName))
    {
        int Count=m_pInputCountEdit->text().toInt();
        for(int i=0;i<m_pTableWgt->rowCount();++i)
        {
            if(m_pTableWgt->item(i,0)->text()==strName)
            {
                int lastCount=m_pTableWgt->item(i,1)->text().toInt();
                QString newCount=QString::number(Count+lastCount);
                QTableWidgetItem *item=new QTableWidgetItem(newCount);
                QDateTime dateTime=QDateTime::currentDateTime();
                QString strTime=dateTime.toString("yyyy-MM-dd hh:mm:ss");
                QTableWidgetItem *startTimeItem=new QTableWidgetItem(strTime);
                m_pTableWgt->setItem(i,1,item);
                m_pTableWgt->setItem(i,3,startTimeItem);
            }
        }
    }
    SetTableWgtAligment();
    WriteFile();
}

void Widget::onOutPutClicked()
{
    QFont textFont;
    textFont.setPointSize(10);
    textFont.setFamily("Microsoft YaHei");
    m_poutputDialog=new QDialog();
    m_poutputComboBox=new QComboBox(m_poutputDialog);
    m_poutputCountEdit=new QLineEdit(m_poutputDialog);
    m_poutputCountEdit->setValidator(new QIntValidator);
    QPushButton *outputAddBtn=new QPushButton(tr("出库"));
    QLabel *nameLabel=new QLabel(tr("物料名称"),m_poutputDialog);
    QLabel *countLabel=new QLabel(tr("出库数量"),m_poutputDialog);

    m_poutputComboBox->setFixedSize(200,28);
    m_poutputCountEdit->setFixedSize(200,28);

    nameLabel->setFixedWidth(100);
    countLabel->setFixedWidth(100);

    outputAddBtn->setFixedSize(120,27);
    outputAddBtn->setFont(textFont);

    m_poutputComboBox->setFont(textFont);
    m_poutputCountEdit->setFont(textFont);
    nameLabel->setFont(textFont);
    countLabel->setFont(textFont);
    QGridLayout *inputLayout=new QGridLayout(m_pInputDialog);
    inputLayout->addWidget(nameLabel,0,0);
    inputLayout->addWidget(m_poutputComboBox,0,1);
    inputLayout->addWidget(countLabel,1,0);
    inputLayout->addWidget(m_poutputCountEdit,1,1);
    inputLayout->addWidget(outputAddBtn,2,1);
    inputLayout->setMargin(20);
    inputLayout->setSpacing(5);
    m_poutputDialog->setLayout(inputLayout);


    int rowCount=m_pTableWgt->rowCount();
    for(int i=0;i<rowCount;++i)
    {
        m_poutputComboBox->addItem(m_pTableWgt->item(i,0)->text());
    }

    m_poutputComboBox->setEditable(true);

    connect(outputAddBtn,&QPushButton::clicked,this,&Widget::onoutPutBtnClicked);

    m_poutputDialog->exec();
}

void Widget::onoutPutBtnClicked()
{
    QString strName=m_poutputComboBox->currentText();
    if(m_NameList.contains(strName))
    {
        int Count=m_poutputCountEdit->text().toInt();
        for(int i=0;i<m_pTableWgt->rowCount();++i)
        {
            if(m_pTableWgt->item(i,0)->text()==strName)
            {
                int lastCount=m_pTableWgt->item(i,1)->text().toInt();
                QString newCount;
                if(lastCount-Count<0)
                {
                    newCount=QString::number(0);
                }
                else
                {
                    newCount=QString::number(lastCount-Count);
                }

                QTableWidgetItem *item=new QTableWidgetItem(newCount);
                QDateTime dateTime=QDateTime::currentDateTime();
                QString strTime=dateTime.toString("yyyy-MM-dd hh:mm:ss");
                QTableWidgetItem *startTimeItem=new QTableWidgetItem(strTime);
                m_pTableWgt->setItem(i,1,item);
                m_pTableWgt->setItem(i,2,startTimeItem);
            }
        }
    }
    SetTableWgtAligment();
    WriteFile();
}

void Widget::onDeleteClicked()
{
    QItemSelectionModel *selections = m_pTableWgt->selectionModel();
    QModelIndexList selected = selections->selectedIndexes();
    QList<int> rowList;
    for(int i=0;i<selected.size();++i)
    {
        int row=selected[i].row();
        if(!rowList.contains(row))
        {
            rowList.append(row);
        }
    }

    for(int i=0;i<rowList.size();++i)
    {
        m_pTableWgt->removeRow(rowList[rowList.size()-i-1]);
    }
    SetTableWgtAligment();
    WriteFile();
}

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加油小杜(接qt定制功能,单模块开发等)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值