#include "myGroupWidget.h" #include #include #include #include #include #include #include #include #include "ExtendedGroupBox.h" #include "toolkit.h" #include "waitwidget.h" #include "FrontendBackendBridge.h" MyParamSet::MyParamSet(QWidget* parent) :QWidget(parent) { setMouseTracking(true); setStyleSheet("QWidget{color: rgb(191, 191, 191);}"); m_ScrollArea = new QScrollArea(this); mainWidgetLayout = new QHBoxLayout; gridPtr.reset(mainWidgetLayout); initwidget(); } MyParamSet::~MyParamSet() { QStringList lists = m_labMap.keys(); for each (auto var in lists) { if (m_labMap.contains(var)) { ExtendedGroupBox* ptr = const_cast(m_labMap[var]); delete ptr; ptr = nullptr; } } m_labMap.clear(); m_groupBoxlist.clear(); if (m_ScrollArea) { delete m_ScrollArea; m_ScrollArea = nullptr; } if (m_waitwidget) { delete m_waitwidget; m_waitwidget = nullptr; } } void MyParamSet::initwidget() { QDir currPath = QApplication::applicationDirPath(); QString json_cfg = currPath.path() + "/config/pram_set_init.json"; UpParData(json_cfg); m_waitwidget = new WaitProgressWidget(this); } void MyParamSet::waitstart(int msec) { if (m_waitwidget) { m_waitwidget->start(msec); } qApp->processEvents(); QThread::msleep(100); } void MyParamSet::waitstop() { if (m_waitwidget) { m_waitwidget->stop(true); } qApp->processEvents(); QThread::msleep(100); } void MyParamSet::fromJson2TXT( QJsonObject& obj) { try { QStringList parmtxt1; QStringList parmtxt2; QStringList parmtxt3; //QMap> configs; QStringList keys = obj.keys(); for each (auto var in keys) { if (obj.value(var).isArray()) { QJsonArray lists = obj.value(var).toArray(); //QMap config; for each (auto var_2 in lists) { if (var_2.isObject()) { QJsonObject obj_2 = var_2.toObject(); QStringList keys = obj_2.keys(); for each (auto var_3 in keys) { if (var.indexOf("外观缺陷参数") != -1) { if (obj_2.value(var_3).isArray()) { QJsonArray lists_2 = obj_2.value(var_3).toArray(); if (lists_2.size() == 7) { QStringList parm{0,0,0,0,0,0,0}; for each (auto var_4 in lists_2) { if (var_4.isObject()) { QJsonObject obj_3 = var_4.toObject(); QStringList keys_2 = obj_3.keys(); int index = -1; if (obj_3.value("cName").toString().indexOf("最小值") != -1) { index = 0; } else if (obj_3.value("cName").toString().indexOf("中间值") != -1) { index = 1; } else if (obj_3.value("cName").toString().indexOf("最大值") != -1) { index = 2; } else if (obj_3.value("cName").toString().indexOf("轻微计数") != -1) { index = 3; } else if (obj_3.value("cName").toString().indexOf("深度计数") != -1) { index = 4; } else if (obj_3.value("cName").toString().indexOf("深度阈值") != -1) { index = 5; } else if (obj_3.value("cName").toString().indexOf("缺陷矫正比例") != -1) { index = 6; } else { } if(index>=0) parm[index] = (obj_3.value("value").toString()); } } //config.insert(var_3, parm.join(",")); parmtxt1.append(QString("%1=%2").arg(var_3, parm.join(","))); } } } else if((var.indexOf("2D尺寸检测参数") != -1)|| (var.indexOf("基础配置参数") != -1)) { if (obj_2.value(var_3).isArray()) { QJsonArray lists_2 = obj_2.value(var_3).toArray(); for each (auto var_4 in lists_2) { if (var_4.isObject()) { QJsonObject obj_3 = var_4.toObject(); QStringList keys_2 = obj_3.keys(); //config.insert(obj_3.value("cName").toString(), obj_3.value("value").toString()); parmtxt1.append(QString("%1=%2").arg(obj_3.value("cName").toString(), obj_3.value("value").toString())); } } } } else if ((var.indexOf("3D大面高度检测参数") != -1) ) { if (obj_2.value(var_3).isArray()) { QJsonArray lists_2 = obj_2.value(var_3).toArray(); for each (auto var_4 in lists_2) { if (var_4.isObject()) { QJsonObject obj_3 = var_4.toObject(); QStringList keys_2 = obj_3.keys(); //config.insert(obj_3.value("cName").toString(), obj_3.value("value").toString()); parmtxt2.append(QString("%1=%2").arg(obj_3.value("cName").toString(), obj_3.value("value").toString())); } } } } else if ((var.indexOf("3D棱边高度检测参数") != -1)) { if (obj_2.value(var_3).isArray()) { QJsonArray lists_2 = obj_2.value(var_3).toArray(); for each (auto var_4 in lists_2) { if (var_4.isObject()) { QJsonObject obj_3 = var_4.toObject(); QStringList keys_2 = obj_3.keys(); //config.insert(obj_3.value("cName").toString(), obj_3.value("value").toString()); parmtxt3.append(QString("%1=%2").arg(obj_3.value("cName").toString(), obj_3.value("value").toString())); } } } } } } } // configs.insert(var, config); } } if(!WriteTXTCfg(parmtxt1, "./000_Dllparam.txt"))qDebug()<<"WriteTXTCfg 000_Dllparam.txt fail "<(m_groupBoxlist[var]); QJsonArray arr; arr.append(ptr->GetDataMap()); obj_vb.insert(var, arr); } } fromJson2TXT(obj_vb); jsonDoc.setObject(obj_vb); QString json_cfg = path; QFile file(json_cfg); if (!file.open(QIODevice::WriteOnly)) { qDebug() << "[Error] " << file.fileName() << QString::fromUtf8("文件无法打开,参数修改失败"); } else { qDebug() << "[INFO] " << file.fileName() << QString::fromUtf8("参数修改完成!"); } file.write(jsonDoc.toJson()); file.close(); waitstop(); } catch (QString ev) { qCritical() << "[Error] " << " ev:" << ev; return; } } void MyParamSet::UpParData(const QString path) { try { waitstart(); //清理窗口 QLayoutItem* child; while ((child = mainWidgetLayout->layout()->takeAt(0)) != 0) { if (child->widget()) { child->widget()->setParent(NULL); } delete child; } QStringList lists = m_labMap.keys(); for each (auto var in lists) { if (m_labMap.contains(var)) { ExtendedGroupBox* ptr = const_cast(m_labMap[var]); delete ptr; ptr = nullptr; } } m_labMap.clear(); m_groupBoxlist.clear(); QWidget* mainWidget = new QWidget(this); mainWidget->setMouseTracking(true); mainWidgetLayout->addWidget(mainWidget); mainWidgetLayout->setMargin(0); QVBoxLayout* m_VBox = new QVBoxLayout; QString json_cfg = path; QJsonObject obj = loadJsonCfg(json_cfg); QStringList keys = obj.keys(); for each (auto var in keys) { QVBoxLayout* advanced_setting_layout = new QVBoxLayout(); ExtendedGroupBox* advanced_setting_group_box = new ExtendedGroupBox(var, this, ExtendedGroupBox::STATE_NORMAL); MyGroupWidget* m_GroupBox = new MyGroupWidget(); QJsonArray tablelist = obj.value(var).toArray(); m_GroupBox->initwidget(tablelist); m_groupBoxlist.insert(var, m_GroupBox); m_labMap.insert(var, advanced_setting_group_box); advanced_setting_layout->addWidget(m_GroupBox); advanced_setting_group_box->addWidget(m_GroupBox); advanced_setting_group_box->setLayout(advanced_setting_layout); m_VBox->addWidget(advanced_setting_group_box); } m_VBox->addSpacing(3); mainWidget->setLayout(m_VBox); m_ScrollArea->setWidget(mainWidget); m_ScrollArea->setWidgetResizable(true); waitstop(); } catch (QString ev) { qCritical() << "[Error] " << " ev:" << ev; return; } } void MyParamSet::mouseMoveEvent(QMouseEvent* event) { Q_UNUSED(event); setCursor(Qt::ArrowCursor); } void MyParamSet::resizeEvent(QResizeEvent* event) { Q_UNUSED(event); m_ScrollArea->resize(this->size()); } MyGroupWidget::MyGroupWidget(QWidget* parent) : QWidget(parent) { setObjectName("MyGroupWidget"); setStyleSheet("QWidget{color: rgb(191, 191, 191);}"); } MyGroupWidget::~MyGroupWidget() { QStringList lists = groupBoxlist.keys(); for each (auto var in lists) { if (groupBoxlist.contains(var)) { ExtendedGroupBox* ptr = const_cast(groupBoxlist[var]); delete ptr; ptr = nullptr; } } groupBoxlist.clear(); DateSheetlist.clear(); } void MyGroupWidget::initwidget(QJsonArray& pramjson) { try { QHBoxLayout* mainWidgetLayout = new QHBoxLayout(this); QWidget* mainWidget = new QWidget(this); mainWidget->setMouseTracking(true); mainWidgetLayout->addWidget(mainWidget); mainWidgetLayout->setMargin(0); QVBoxLayout* m_VBox = new QVBoxLayout; //判断加载成功 if (pramjson.isEmpty()) { qCritical() << "[Error] " << QString::fromUtf8("参数文件无法打开!"); return; } for (auto val = 0; val < pramjson.size(); val++) { if (pramjson.at(val).isObject()) { QJsonObject obj = pramjson.at(val).toObject(); if (!obj.isEmpty()) { QStringList list = obj.keys(); for each (auto var in list) { QVBoxLayout* advanced_setting_layout = new QVBoxLayout(); ExtendedGroupBox* advanced_setting_group_box = new ExtendedGroupBox(var, this, ExtendedGroupBox::STATE_NORMAL); DateSheetWidget* m_datasheet = new DateSheetWidget(); QJsonArray tablelist = obj.value(var).toArray(); m_datasheet->initwidget(tablelist, false); groupBoxlist.insert(var, advanced_setting_group_box); DateSheetlist.insert(var, m_datasheet); advanced_setting_layout->addWidget(m_datasheet); advanced_setting_group_box->addWidget(m_datasheet); advanced_setting_group_box->setLayout(advanced_setting_layout); m_VBox->addWidget(advanced_setting_group_box); } } } } mainWidget->setLayout(m_VBox); } catch (QString ev) { qCritical() << "[Error] " << " ev:" << ev; return; } } QJsonObject MyGroupWidget::GetDataMap() { QStringList lists = DateSheetlist.keys(); QJsonObject obj; for each (auto var in lists) { if (DateSheetlist.contains(var)) { DateSheetWidget* ptr = const_cast(DateSheetlist[var]); obj.insert(var, ptr->GetData()); } } return obj; } DateStateLabel::DateStateLabel(QWidget* parent) { setObjectName("DateStateLabel"); } DateStateLabel::~DateStateLabel() { } void DateStateLabel::initwidget(const QString name, bool ReadOnly) { QFont m_Font; m_Font.setFamily("Microsoft YaHei"); m_Font.setPixelSize(15); QString m_style = "QLabel{color:rgb(219,219,219);}"; QString m_style1 = "QTextEdit{color:rgb(219,219,219);}"; QHBoxLayout* m_hbox = new QHBoxLayout; QLabel* m_lab = new QLabel; m_lab->setFont(m_Font); m_lab->setStyleSheet(m_style); m_lab->setFixedWidth(160); m_lab->setFixedHeight(30); m_lab->setText(name); m_name = name; label_ptr.reset(m_lab); QTextEdit* m_edit = new QTextEdit; m_edit->setFixedHeight(30); m_edit->setFont(m_Font); m_edit->setStyleSheet(m_style1); m_edit->setFixedWidth(160); m_edit->setFixedHeight(30); m_edit->setAttribute(Qt::WA_TranslucentBackground); m_edit->setAlignment(Qt::AlignCenter); m_edit->setReadOnly(ReadOnly); m_edit->setText(""); text_ptr.reset(m_edit); m_hbox->addWidget(m_lab); m_hbox->addWidget(m_edit); setLayout(m_hbox); // connect connect(m_edit, &QTextEdit::textChanged, [this]() { if (m_value.isEmpty())return; qDebug() << QString::fromUtf8("[%1] %2").arg(m_name, text_ptr->toPlainText()) << endl; emit ValueChanged(QString::fromUtf8("[%1] %2").arg(m_name, text_ptr->toPlainText())); }); } QString DateStateLabel::get_value() { m_value = text_ptr->toPlainText(); return m_value; } QString DateStateLabel::get_name() { return m_name; } void DateStateLabel::GetshowMag(const QString msg) { text_ptr->setText(msg); m_value = msg; } DateSheetWidget::DateSheetWidget(QWidget* parent) { setObjectName("DateSheetWidget"); } DateSheetWidget::~DateSheetWidget() { QStringList lists = m_labMap.keys(); for each (auto var in lists) { if (m_labMap.contains(var)) { DateStateLabel* ptr = const_cast(m_labMap[var]); delete ptr; ptr = nullptr; } } m_labMap.clear(); } void DateSheetWidget::initwidget(QJsonArray& tablelist, bool ReadOnly) { QHBoxLayout* mainWidgetLayout = new QHBoxLayout(this); QWidget* mainWidget = new QWidget(this); mainWidget->setMouseTracking(true); mainWidgetLayout->addWidget(mainWidget); mainWidgetLayout->setMargin(0); ////判断加载成功 //if (tablelist.isEmpty()) //{ // qCritical() << "[Error] " << QString::fromUtf8("自定义界面无法打开,界面配置文件缺少tablelist属性!"); // //return; //} QFont m_Font; m_Font.setFamily("Microsoft YaHei"); m_Font.setPixelSize(15); QString m_style = "QLabel{color:rgb(219,219,219);}"; QString m_style1 = "QTextEdit{color:rgb(219,219,219);}"; try { QVBoxLayout* m_VBox = new QVBoxLayout; for (auto val = 0; val < bridge.back.json.tableList.datas.size(); val++) { DateStateLabel* m_lab = new DateStateLabel(); QString name = bridge.back.json.tableList.datas[val].cName; QString value = bridge.back.json.tableList.datas[val].value; m_labMap.insert(name, m_lab); m_lab->initwidget(name, ReadOnly); m_lab->GetshowMag(value); m_VBox->addWidget(m_lab); } m_VBox->addStretch(); mainWidget->setLayout(m_VBox); } catch (QString ev) { qCritical() << "[Error] " << " ev:" << ev; } } QJsonArray DateSheetWidget::GetData() { QJsonArray arr; QStringList keys = m_labMap.keys(); for each (auto var in keys) { QJsonObject obj; obj.insert("cName", var); obj.insert("value", m_labMap[var]->get_value()); arr.append(obj); } return arr; } void DateSheetWidget::On_reciveData(QString key, QString msg) { if (m_labMap.count() > 0 && m_labMap.contains(key)) { m_labMap.value(key)->GetshowMag(msg); } } void DateSheetWidget::mouseMoveEvent(QMouseEvent* event) { Q_UNUSED(event); setCursor(Qt::ArrowCursor); }