From 8553398ebf8b1aa074d47bbf1518d022ea4b67d1 Mon Sep 17 00:00:00 2001 From: rci <15089880081@gmail.com> Date: Fri, 1 Nov 2024 17:15:20 +0800 Subject: [PATCH] add --- uiModule_switchProduct.h | 259 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 259 insertions(+) create mode 100644 uiModule_switchProduct.h diff --git a/uiModule_switchProduct.h b/uiModule_switchProduct.h new file mode 100644 index 0000000..5ae49df --- /dev/null +++ b/uiModule_switchProduct.h @@ -0,0 +1,259 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +class switchProductWidget : public QWidget +{ + Q_OBJECT +public: + // + bool disableTextChange = false; + QMutex mutex; + std::vectorproductDatas; + int* currentProductIndexPtr; + // + std::string fileDir = "./config/productConfig"; + QVBoxLayout* layout = new QVBoxLayout(this); + fancyButtonText* switchBtn = new fancyButtonText(100, 60, "修改", "修改当前机型"); + QLabel* armHeartBeatSign = new QLabel(); + //料号条码输入 + QLineEdit* partNumberIntputLine = new QLineEdit(); + + //运行按钮 + fancyButtonText* startBtn; + //SN条码输入 + QLineEdit* snIntputLine = new QLineEdit(); + //SN完成输入后1秒触发 + QTimer* timer; + //料号显示 + QComboBox* productSelect = new QComboBox(this); + QLabel* currentProduct = new QLabel(this); + //料号类型 + QComboBox* productNameTypeSwitch = new QComboBox(this); + void clear() + { + partNumberIntputLine->clear(); + snIntputLine->clear(); + } + switchProductWidget() + { + currentProductIndexPtr = &_core._appConfig._switchProductWidgetDataPtr.currentProductIndex; + QPalette palette; + palette.setColor(QPalette::WindowText, Qt::white); + QFont font("微软雅黑", 12, QFont::Bold); + this->setLayout(layout); + { + QHBoxLayout* switchLayout = new QHBoxLayout(); + productNameTypeSwitch->addItem("型号"); + productNameTypeSwitch->addItem("客户料号"); + productNameTypeSwitch->addItem("料号"); + + productNameTypeSwitch->setPalette(palette); + productNameTypeSwitch->setFont(font); + productNameTypeSwitch->setFixedWidth(90); + switchLayout->addWidget(productNameTypeSwitch); + + productSelect->setPalette(palette); + productSelect->setFont(font); + + switchLayout->addWidget(productSelect); + productSelect->hide(); + + currentProduct->setFont(font); + currentProduct->setPalette(palette); + + switchLayout->addWidget(currentProduct); + switchLayout->addWidget(switchBtn); + + layout->addLayout(switchLayout); + } + + + QHBoxLayout* hBtnLayout2 = new QHBoxLayout(); + partNumberIntputLine->setFixedHeight(50); + partNumberIntputLine->setFont(font); + partNumberIntputLine->setPlaceholderText("料号条码输入"); + hBtnLayout2->addWidget(partNumberIntputLine); + + QHBoxLayout* hBtnLayout = new QHBoxLayout(); + startBtn = new fancyButtonText(80, -1, "运行", "运行检测程序"); + snIntputLine->setFixedHeight(50); + snIntputLine->setFont(font); + snIntputLine->setPlaceholderText("SN条码输入"); + hBtnLayout->addWidget(snIntputLine); + hBtnLayout->addWidget(startBtn); + + layout->addLayout(hBtnLayout2); + layout->addLayout(hBtnLayout); + productSelectFresh(0); + connect(startBtn, &QPushButton::clicked, this, [=]() + { + emit startArmProgramSignal(indexFromPartNumber, snIntputLine->text()); + std::cout << "按下按钮" << std::endl; + }); + connect(switchBtn, &QPushButton::clicked, this, &switchProductWidget::startSwitch); + connect(productSelect, &QComboBox::currentTextChanged, this, &switchProductWidget::currentProductSwitch); + connect(productSelect, &QComboBox::currentTextChanged, this, [=]() + { + emit switchProductSignal(productSelect->currentIndex()); + }); + connect(productNameTypeSwitch, &QComboBox::currentTextChanged, this, [=]() + { + productSelectFresh(productNameTypeSwitch->currentIndex()); + }); + connect(partNumberIntputLine, &QLineEdit::textChanged, this, [=]() + { + timer->start(); + //partNumberIntputLineSlot(partNumberIntputLine->text().toStdString()); + }); + timer = new QTimer(this); + timer->setInterval(300); // 设置1秒超时 + timer->setSingleShot(true); // 定时器只触发一次 + connect(timer, &QTimer::timeout, this, [=]() + { + partNumberIntputLineSlot(partNumberIntputLine->text().toStdString()); + }); + currentProduct->setText("请输入料号"); + productSelect->hide(); + switchBtn->hide(); + startBtn->setDisabled(true); + } + void productSelectFresh(int index) + { + int indexTemp = getMax(productSelect->currentIndex(), 0); + productSelect->clear(); + if (_core._appConfig.productDatas.size() == 0) + { + fancyWarnWindow* warn = new fancyWarnWindow + (fancyWarnWindow::Warning, "找不到任何产品配置文件", + QString("请查看%1中是否正确存放配置文件").arg(QString::fromStdString(fileDir)), true); + return; + } + + switch(index) + { + case 0: + for (auto data : _core._appConfig.productDatas) + productSelect->addItem(QString::fromStdString(data.name)); + currentProduct->setText(QString::fromStdString(_core._appConfig.productDatas[indexTemp].name)); + break; + case 1: + for (auto data : _core._appConfig.productDatas) + productSelect->addItem(QString::fromStdString(data.customerPartNumber)); + currentProduct->setText(QString::fromStdString(_core._appConfig.productDatas[indexTemp].customerPartNumber)); + break; + case 2: + for (auto data : _core._appConfig.productDatas) + productSelect->addItem(QString::fromStdString(data.foxconnPartNumber)); + currentProduct->setText(QString::fromStdString(_core._appConfig.productDatas[indexTemp].foxconnPartNumber)); + break; + } + productSelect->setCurrentIndex(indexTemp); + siwtchBtnState = 1; + startSwitch(); + } +public slots: + void setHeatBeat() + { + + } + void switchStartBtnStatus(bool status) + { + if (status == true) + { + startBtn->toDefault(); + if (disableTextChange == false) + startBtn->setText("运行"); + snIntputLine->setDisabled(false); + partNumberIntputLine->setDisabled(false); + std::cout << "按下软件运行" << std::endl; + } + else + { + startBtn->toRed(); + if (disableTextChange == false) + startBtn->setText("急停"); + snIntputLine->setDisabled(true); + partNumberIntputLine->setDisabled(true); + std::cout << "按下软件急停" << std::endl; + } + } +signals: + void startArmProgramSignal(int,QString); + void switchProductSignal(int); +private: + int indexFromPartNumber = -1; + int siwtchBtnState = 0; +private slots: + void partNumberIntputLineSlot(std::string partNumber) + { + int PartNumber_Count = partNumber.length();//循环次数 + for (auto i = 0; i < PartNumber_Count; i++) + { + std::string partNumber_Split = partNumber.substr(0, PartNumber_Count - i); + auto it = _core._appConfig.partNumberWithIndex.find(partNumber_Split); + if (it != _core._appConfig.partNumberWithIndex.end()) + { + int index = _core._appConfig.partNumberWithIndex.find(partNumber_Split)->second; + currentProduct->setText(QString::fromStdString(_core._appConfig.productDatas[index].name)); + *currentProductIndexPtr = index; + startBtn->setEnabled(true); + indexFromPartNumber = index; + snIntputLine->setFocus(); + emit switchProductSignal(index); + return; + } + } + + { + currentProduct->setText("未找到对应料号!"); + startBtn->setDisabled(true); + } + } + void startSwitch() + { + if(siwtchBtnState == 0) + { + currentProduct->hide(); + productSelect->show(); + switchBtn->setText("取消"); + siwtchBtnState = 1; + return; + } + else if (siwtchBtnState == 1) + { + currentProduct->show(); + productSelect->hide(); + switchBtn->setText("修改"); + siwtchBtnState = 0; + return; + } + + } + void currentProductSwitch(QString input) + { + int index = getMax(0,productSelect->currentIndex()); + *currentProductIndexPtr = index; + + currentProduct->setText(input); + //if (siwtchBtnState == 1) + // return; + startSwitch(); + } +}; + +#pragma once \ No newline at end of file