Files
2024-02-27 15:29:15 +08:00

604 lines
20 KiB
C++

#include "myGroupWidget.h"
#include <QJsonArray>
#include <QJsonParseError>
#include <QDebug>
#include <QDir>
#include <QTextStream>
#include <QApplication>
#include <QFont>
#include <QThread>
#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<ExtendedGroupBox*>(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<QString, QMap<QString, QString>> configs;
QStringList keys = obj.keys();
for each (auto var in keys) {
if (obj.value(var).isArray()) {
QJsonArray lists = obj.value(var).toArray();
//QMap<QString, QString> 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 "<<endl;
if(!WriteTXTCfg(parmtxt2, "./000_Dll_T_x_y_z_param.txt"))qDebug()<<"WriteTXTCfg 000_Dll_T_x_y_z_param.txt fail "<<endl;
if(!WriteTXTCfg(parmtxt3, "./000_Dll_E_x_y_z_param.txt"))qDebug()<<"WriteTXTCfg 000_Dll_E_x_y_z_param.txt fail "<<endl;
}
catch (QString ev) {
qCritical() << "[Error] " << " ev:" << ev;
return;
}
}
void MyParamSet::SaveParData(const QString path)
{
try {
waitstart();
QStringList lists = m_groupBoxlist.keys();
QJsonDocument jsonDoc;
QJsonObject obj_vb;
for each (auto var in lists)
{
if (m_groupBoxlist.contains(var))
{
MyGroupWidget* ptr = const_cast<MyGroupWidget*>(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<ExtendedGroupBox*>(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<ExtendedGroupBox*>(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<DateSheetWidget*>(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<DateStateLabel*>(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);
}