diff --git a/softwareDirectory/AutoVerScheme/checkwindow.cpp b/softwareDirectory/AutoVerScheme/checkwindow.cpp index 8e5d8ea..b528b5e 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.cpp +++ b/softwareDirectory/AutoVerScheme/checkwindow.cpp @@ -41,6 +41,18 @@ ui->comboBoxName->addItem("ALL"); ui->comboBoxModal->addItem("ALL"); ui->comboBoxCustomer->addItem("ALL"); + + //统一定义单位转换系数 + unitTransList.insert("V",1); + unitTransList.insert("MV",1000); + unitTransList.insert("A",1); + unitTransList.insert("MA",1000); + unitTransList.insert("UA",1000000); + unitTransList.insert("W",1); + unitTransList.insert("KW",0.001); + unitTransList.insert("Ω",1); + unitTransList.insert("KΩ",0.001); + unitTransList.insert("KΩ",0.000001); getCheckDevice(); //ui->stackedWidget_2->setCurrentIndex(1); //ui->tableWidgetDevice->verticalHeader()->sectionResizeMode(QHeaderView::Stretch); @@ -153,6 +165,7 @@ void CheckWindow::initDeviceInfo(QString sId) { + standardId = sId; QString strStyle = QString("QLabel{image:url(%1);}").arg(programInfo.img_path); qDebug() << "strStyle:" << strStyle; ui->label_8->setStyleSheet(strStyle); @@ -184,7 +197,7 @@ if(addrList.length()>0){ info.programInterface = addrList[0]; } - info.cmdList = BaseCommonApi::getInstructionLib(info.id); + info.cmdList = BaseCommonApi::getInstructionLib(programInfo.id); connectList.append(info); addrList.clear(); } @@ -266,6 +279,10 @@ { //QStringList idList=programInfo.tested_device_id.split(","); QString deviceId = selectTaskList[0].sample_id; + QList CliTable = BaseCommonApi::getJudgeCalibrationTable(deviceId); + if(CliTable.length()>0){ + iEquipType = CliTable[0].belong_standard_equipment.toInt(); + } //QStringList headlist; headList.clear(); calibrationList.clear(); @@ -276,6 +293,7 @@ //tableWidgetItem ui->tableWidget_Point->clearContents(); ui->tableWidget_Point->setRowCount(0); + deleteItem(ui->HeadListLayout); //循环数据 int rowCount=0; int row=0; @@ -296,7 +314,8 @@ // ======================================================================================== // 数据循环显示 // =================================================================================== - const auto &dataRes = caliDataList.value(headTableList.keys()[index]); + QString sLabel = headTableList.keys()[index]; + const auto &dataRes = caliDataList.value(sLabel); //tableWidget->setRowCount(data.count()); for (int i = 0; i < dataRes.count(); ++i) { @@ -309,11 +328,43 @@ ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1")); row++; } + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(sLabel, this); + //设置样式 + // 设置按钮大小为 56x20 + button->setFixedSize(85, 40); + button->setCheckable(true); + button->setAutoExclusive(true); + //设置第一个按钮选中状态 + if(index==0){ button->setChecked(true);} + //button->setc(true); + // 设置按钮样式表 + button->setStyleSheet("QPushButton {" + "border: 1px solid white;" // 白色边框 + "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 + "background-color: rgba(242, 242, 242, 1);" // 浅灰色背景 + "}" + "QPushButton:hover {" + "background-color: rgba(215, 215, 215, 1);;" // 鼠标悬停时变为深灰色背景 + "}" + "QPushButton:checked {" + "color: white;" + "background-color: rgb(74, 102, 186);" // 选中时变为蓝色背景 + "}"); + + ui->HeadListLayout->addWidget(button); + connect(button, &QPushButton::clicked, this, [this,index]() { + //tackedWidget->setCurrentIndex(index); + initCheckTable(index); + }); ++index; } + ui->HeadListLayout->addStretch(); } - ui->stackedWidget_2->setCurrentIndex(1); + initCheckTable(0); } void CheckWindow::on_deviceButton_clicked(Dept task,int idx) @@ -371,8 +422,8 @@ { DialogCheckResult* dlg = new DialogCheckResult; dlg->taskList =selectTaskList; - dlg->deviceId = programInfo.tested_device_id; - dlg->initCheckTable(measureCalList,headList,programInfo.standard_device_id); + dlg->deviceId = selectTaskList[0].sample_id; + dlg->initCheckTable(&caliDataList,&headTableList,standardId); dlg->setModal(true); dlg->show(); } @@ -592,56 +643,86 @@ } } -void CheckWindow::initCheckTable() +void CheckWindow::initCheckTable(int idx) { +// ui->tableWidgetCheck->clearContents(); +// ui->tableWidgetCheck->setRowCount(0); +// ui->tableWidgetCheck->setColumnCount(0); +// int rowCount = 0; +// int row=0; +// ui->tableWidgetCheck->setColumnCount(headList.count()); +// ui->tableWidgetCheck->setHorizontalHeaderLabels(headList); +// for(int i=0;itableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); +// } +// measureCalList.clear(); +// for(int i=0;itableWidget_Point->rowCount();i++){ +// Qt::CheckState state = ui->tableWidget_Point->item(i,0)->checkState(); +// if(state == Qt::Checked){ +// QStringList& item = calibrationList[i]; +// int cnt = ui->tableWidget_Point->item(i,2)->text().toInt(); +// for(int j=0;jtableWidgetCheck->rowCount(); +// ui->tableWidgetCheck->insertRow(rowCount); +// ui->tableWidgetCheck->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); +// //循环读取值 headlist,count是列的数量 +// for(int k=1;ktableWidgetCheck->setItem(row, k, new QTableWidgetItem(item[k])); +// } +// SaveDeviceMeasureCalibrator measItem; +// measItem.item_data_id = item[1]; +// measItem.maximum_error_formula = item[10];//最大允许误差(公式) +// measItem.error_param_a = item[11];//误差参数a +// measItem.error_param_b = item[12];//误差参数b +// measItem.params = item[2];//参数 +// measItem.capacity=item[3];//量 +// measItem.unit=item[4];//单位 +// measItem.frequency=item[5];//频率 +// measItem.frequency_unit=item[6];//频率单位 +// measItem.range_range=item[7];//量程 +// measItem.standard_value=item[8];//标准值(输入字段,特殊:指针式万用表输出字段) +// measItem.indicating_value=item[15];//示值(输出字段,特殊:指针式万用表输入字段) +// measItem.maximum_error=item[10];//最大允许误差(值) +// //measItem.absolute_error=item[11];//绝对误差 +// measItem.resolution=item[9];//分辨力 +// measItem.measure_indication_value=item[19];//被检表示值 +// measureCalList.append(measItem); +// row++; +// } +// } +// } + if(curHeadIdx==idx) + return; + curHeadIdx = idx; + QString sLabel = headTableList.keys()[curHeadIdx]; + const auto &dataRes = caliDataList.value(sLabel); + const auto &headrs = headTableList.value(sLabel); ui->tableWidgetCheck->clearContents(); ui->tableWidgetCheck->setRowCount(0); ui->tableWidgetCheck->setColumnCount(0); - int rowCount = 0; - int row=0; - ui->tableWidgetCheck->setColumnCount(headList.count()); - ui->tableWidgetCheck->setHorizontalHeaderLabels(headList); - for(int i=0;itableWidgetCheck->setColumnCount(headrs.count()); + ui->tableWidgetCheck->setHorizontalHeaderLabels(headrs); + for(int i=0;itableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); } - measureCalList.clear(); - for(int i=0;itableWidget_Point->rowCount();i++){ - Qt::CheckState state = ui->tableWidget_Point->item(i,0)->checkState(); - if(state == Qt::Checked){ - QStringList& item = calibrationList[i]; - int cnt = ui->tableWidget_Point->item(i,2)->text().toInt(); - for(int j=0;jtableWidgetCheck->rowCount(); - ui->tableWidgetCheck->insertRow(rowCount); - ui->tableWidgetCheck->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int k=1;ktableWidgetCheck->setItem(row, k, new QTableWidgetItem(item[k])); - } - SaveDeviceMeasureCalibrator measItem; - measItem.item_data_id = item[1]; - measItem.maximum_error_formula = item[10];//最大允许误差(公式) - measItem.error_param_a = item[11];//误差参数a - measItem.error_param_b = item[12];//误差参数b - measItem.params = item[2];//参数 - measItem.capacity=item[3];//量 - measItem.unit=item[4];//单位 - measItem.frequency=item[5];//频率 - measItem.frequency_unit=item[6];//频率单位 - measItem.range_range=item[7];//量程 - measItem.standard_value=item[8];//标准值(输入字段,特殊:指针式万用表输出字段) - measItem.indicating_value=item[15];//示值(输出字段,特殊:指针式万用表输入字段) - measItem.maximum_error=item[10];//最大允许误差(值) - //measItem.absolute_error=item[11];//绝对误差 - measItem.resolution=item[9];//分辨力 - measItem.measure_indication_value=item[19];//被检表示值 - measureCalList.append(measItem); - row++; - } + //tableWidget->setRowCount(data.count()); + int rowCount = 0; + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = ui->tableWidgetCheck->rowCount(); + ui->tableWidgetCheck->insertRow(rowCount); + ui->tableWidgetCheck->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jtableWidgetCheck->setItem(i, j, new QTableWidgetItem(dataRes[i][j])); } } +} + +void CheckWindow::connectDevice(){ if(connectList.length()>0&&connectList[0].type==0) deviceEngine.openDevice(connectList[0].programInterface.visa,"Visa"); if(connectList.length()>1&&connectList[1].type==1) @@ -659,52 +740,140 @@ return nullptr; } +int CheckWindow::getIndexByHeader(QString sLabel,QString sName){ + const auto &headrs = headTableList.value(sLabel); + for(int i=0;iinstruct_config.split(";"); - if(sList.length()>0){ - for (QString& sCmd : sList){ - standardEngine.sendData(sCmd); - } - } - } - } - //被检设备读数 - if(deviceEngine.getState()){ - InstructionLib *instrcutLib = getCmdByCheckName(0,item.params); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); - if(sList.length()>0){ - for (QString& sCmd : sList){ - deviceEngine.sendData(sCmd); - } - } - Delay_MSec(2000); - sRet = deviceEngine.queryData(instrcutLib->instruct_read); - } - } - // - if(sRet==""){ - bool bOk = false; - double dRet = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + initCheckTable(i); + QString sLabel = headTableList.keys()[i]; + QList dataRes = caliDataList.value(sLabel); - if (bOk) { - sRet = QString::number(dRet); + for (int i = 0; i < dataRes.count(); ++i) { + QString sRet=""; + double dStdValue,dError; + //标准器输出 + int idx= getIndexByHeader(sLabel,"检定项目"); + QString sParam = dataRes[i][idx]; + if(standardEngine.getState()){ + InstructionLib *instrcutLib = getCmdByCheckName(1,sParam); + if(instrcutLib!=nullptr){ + QStringList sList = instrcutLib->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + standardEngine.sendData(sCmd); + qDebug() << "standard cmds:" << sCmd; + } + } + } } + //被检设备读数 + if(deviceEngine.getState()){ + InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); + if(instrcutLib!=nullptr){ + QStringList sList = instrcutLib->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + deviceEngine.sendData(sCmd); + qDebug() << "config cmds:" << sCmd; + } + } + Delay_MSec(2000); + qDebug() << "query cmds:" << instrcutLib->instruct_read; + sRet = deviceEngine.queryData(instrcutLib->instruct_read); + idx= getIndexByHeader(sLabel,"单位"); + dStdValue = transUnit(sRet,dataRes[i][idx]); + } + } + // + if(sRet==""){ + bool bOk = false; + dStdValue = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + + if (bOk) { + sRet = QString::number(dStdValue); + //idx= getIndexByHeader(sLabel,"单位"); + //dStdValue = transUnit(sRet,dataRes[i][idx]); + //sRet = QString::number(dStdValue); + } + } + //item.measure_indication_value = sRet; + if(iEquipType==1){ + idx= getIndexByHeader(sLabel,"示值"); + dataRes[i][idx] = QString::number(dStdValue); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dStdValue))); //示值 + idx= getIndexByHeader(sLabel,"标准值"); + double dTmp = dataRes[i][idx].toDouble(); + dError = dStdValue-dTmp; + idx= getIndexByHeader(sLabel,"绝对误差"); + dataRes[i][idx] = QString::number(dError); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dError))); //示值 + } + //ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); } - item.measure_indication_value = sRet; - ui->tableWidgetCheck->setItem(i,15,new QTableWidgetItem(sRet)); //示值 - ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); + caliDataList.insert(sLabel,dataRes); } +// initCheckTable(); +// for(int i=0;iinstruct_config.split(";"); +// if(sList.length()>0){ +// for (QString& sCmd : sList){ +// standardEngine.sendData(sCmd); +// } +// } +// } +// } +// //被检设备读数 +// if(deviceEngine.getState()){ +// InstructionLib *instrcutLib = getCmdByCheckName(0,item.params); +// if(instrcutLib!=nullptr){ +// QStringList sList = instrcutLib->instruct_config.split(";"); +// if(sList.length()>0){ +// for (QString& sCmd : sList){ +// deviceEngine.sendData(sCmd); +// } +// } +// Delay_MSec(2000); +// sRet = deviceEngine.queryData(instrcutLib->instruct_read); +// } +// } +// // +// if(sRet==""){ +// bool bOk = false; +// double dRet = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + +// if (bOk) { +// sRet = QString::number(dRet); +// } +// } +// item.measure_indication_value = sRet; +// ui->tableWidgetCheck->setItem(i,15,new QTableWidgetItem(sRet)); //示值 +// ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); +// } } void CheckWindow::Delay_MSec(unsigned int msec) diff --git a/softwareDirectory/AutoVerScheme/checkwindow.cpp b/softwareDirectory/AutoVerScheme/checkwindow.cpp index 8e5d8ea..b528b5e 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.cpp +++ b/softwareDirectory/AutoVerScheme/checkwindow.cpp @@ -41,6 +41,18 @@ ui->comboBoxName->addItem("ALL"); ui->comboBoxModal->addItem("ALL"); ui->comboBoxCustomer->addItem("ALL"); + + //统一定义单位转换系数 + unitTransList.insert("V",1); + unitTransList.insert("MV",1000); + unitTransList.insert("A",1); + unitTransList.insert("MA",1000); + unitTransList.insert("UA",1000000); + unitTransList.insert("W",1); + unitTransList.insert("KW",0.001); + unitTransList.insert("Ω",1); + unitTransList.insert("KΩ",0.001); + unitTransList.insert("KΩ",0.000001); getCheckDevice(); //ui->stackedWidget_2->setCurrentIndex(1); //ui->tableWidgetDevice->verticalHeader()->sectionResizeMode(QHeaderView::Stretch); @@ -153,6 +165,7 @@ void CheckWindow::initDeviceInfo(QString sId) { + standardId = sId; QString strStyle = QString("QLabel{image:url(%1);}").arg(programInfo.img_path); qDebug() << "strStyle:" << strStyle; ui->label_8->setStyleSheet(strStyle); @@ -184,7 +197,7 @@ if(addrList.length()>0){ info.programInterface = addrList[0]; } - info.cmdList = BaseCommonApi::getInstructionLib(info.id); + info.cmdList = BaseCommonApi::getInstructionLib(programInfo.id); connectList.append(info); addrList.clear(); } @@ -266,6 +279,10 @@ { //QStringList idList=programInfo.tested_device_id.split(","); QString deviceId = selectTaskList[0].sample_id; + QList CliTable = BaseCommonApi::getJudgeCalibrationTable(deviceId); + if(CliTable.length()>0){ + iEquipType = CliTable[0].belong_standard_equipment.toInt(); + } //QStringList headlist; headList.clear(); calibrationList.clear(); @@ -276,6 +293,7 @@ //tableWidgetItem ui->tableWidget_Point->clearContents(); ui->tableWidget_Point->setRowCount(0); + deleteItem(ui->HeadListLayout); //循环数据 int rowCount=0; int row=0; @@ -296,7 +314,8 @@ // ======================================================================================== // 数据循环显示 // =================================================================================== - const auto &dataRes = caliDataList.value(headTableList.keys()[index]); + QString sLabel = headTableList.keys()[index]; + const auto &dataRes = caliDataList.value(sLabel); //tableWidget->setRowCount(data.count()); for (int i = 0; i < dataRes.count(); ++i) { @@ -309,11 +328,43 @@ ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1")); row++; } + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(sLabel, this); + //设置样式 + // 设置按钮大小为 56x20 + button->setFixedSize(85, 40); + button->setCheckable(true); + button->setAutoExclusive(true); + //设置第一个按钮选中状态 + if(index==0){ button->setChecked(true);} + //button->setc(true); + // 设置按钮样式表 + button->setStyleSheet("QPushButton {" + "border: 1px solid white;" // 白色边框 + "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 + "background-color: rgba(242, 242, 242, 1);" // 浅灰色背景 + "}" + "QPushButton:hover {" + "background-color: rgba(215, 215, 215, 1);;" // 鼠标悬停时变为深灰色背景 + "}" + "QPushButton:checked {" + "color: white;" + "background-color: rgb(74, 102, 186);" // 选中时变为蓝色背景 + "}"); + + ui->HeadListLayout->addWidget(button); + connect(button, &QPushButton::clicked, this, [this,index]() { + //tackedWidget->setCurrentIndex(index); + initCheckTable(index); + }); ++index; } + ui->HeadListLayout->addStretch(); } - ui->stackedWidget_2->setCurrentIndex(1); + initCheckTable(0); } void CheckWindow::on_deviceButton_clicked(Dept task,int idx) @@ -371,8 +422,8 @@ { DialogCheckResult* dlg = new DialogCheckResult; dlg->taskList =selectTaskList; - dlg->deviceId = programInfo.tested_device_id; - dlg->initCheckTable(measureCalList,headList,programInfo.standard_device_id); + dlg->deviceId = selectTaskList[0].sample_id; + dlg->initCheckTable(&caliDataList,&headTableList,standardId); dlg->setModal(true); dlg->show(); } @@ -592,56 +643,86 @@ } } -void CheckWindow::initCheckTable() +void CheckWindow::initCheckTable(int idx) { +// ui->tableWidgetCheck->clearContents(); +// ui->tableWidgetCheck->setRowCount(0); +// ui->tableWidgetCheck->setColumnCount(0); +// int rowCount = 0; +// int row=0; +// ui->tableWidgetCheck->setColumnCount(headList.count()); +// ui->tableWidgetCheck->setHorizontalHeaderLabels(headList); +// for(int i=0;itableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); +// } +// measureCalList.clear(); +// for(int i=0;itableWidget_Point->rowCount();i++){ +// Qt::CheckState state = ui->tableWidget_Point->item(i,0)->checkState(); +// if(state == Qt::Checked){ +// QStringList& item = calibrationList[i]; +// int cnt = ui->tableWidget_Point->item(i,2)->text().toInt(); +// for(int j=0;jtableWidgetCheck->rowCount(); +// ui->tableWidgetCheck->insertRow(rowCount); +// ui->tableWidgetCheck->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); +// //循环读取值 headlist,count是列的数量 +// for(int k=1;ktableWidgetCheck->setItem(row, k, new QTableWidgetItem(item[k])); +// } +// SaveDeviceMeasureCalibrator measItem; +// measItem.item_data_id = item[1]; +// measItem.maximum_error_formula = item[10];//最大允许误差(公式) +// measItem.error_param_a = item[11];//误差参数a +// measItem.error_param_b = item[12];//误差参数b +// measItem.params = item[2];//参数 +// measItem.capacity=item[3];//量 +// measItem.unit=item[4];//单位 +// measItem.frequency=item[5];//频率 +// measItem.frequency_unit=item[6];//频率单位 +// measItem.range_range=item[7];//量程 +// measItem.standard_value=item[8];//标准值(输入字段,特殊:指针式万用表输出字段) +// measItem.indicating_value=item[15];//示值(输出字段,特殊:指针式万用表输入字段) +// measItem.maximum_error=item[10];//最大允许误差(值) +// //measItem.absolute_error=item[11];//绝对误差 +// measItem.resolution=item[9];//分辨力 +// measItem.measure_indication_value=item[19];//被检表示值 +// measureCalList.append(measItem); +// row++; +// } +// } +// } + if(curHeadIdx==idx) + return; + curHeadIdx = idx; + QString sLabel = headTableList.keys()[curHeadIdx]; + const auto &dataRes = caliDataList.value(sLabel); + const auto &headrs = headTableList.value(sLabel); ui->tableWidgetCheck->clearContents(); ui->tableWidgetCheck->setRowCount(0); ui->tableWidgetCheck->setColumnCount(0); - int rowCount = 0; - int row=0; - ui->tableWidgetCheck->setColumnCount(headList.count()); - ui->tableWidgetCheck->setHorizontalHeaderLabels(headList); - for(int i=0;itableWidgetCheck->setColumnCount(headrs.count()); + ui->tableWidgetCheck->setHorizontalHeaderLabels(headrs); + for(int i=0;itableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); } - measureCalList.clear(); - for(int i=0;itableWidget_Point->rowCount();i++){ - Qt::CheckState state = ui->tableWidget_Point->item(i,0)->checkState(); - if(state == Qt::Checked){ - QStringList& item = calibrationList[i]; - int cnt = ui->tableWidget_Point->item(i,2)->text().toInt(); - for(int j=0;jtableWidgetCheck->rowCount(); - ui->tableWidgetCheck->insertRow(rowCount); - ui->tableWidgetCheck->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int k=1;ktableWidgetCheck->setItem(row, k, new QTableWidgetItem(item[k])); - } - SaveDeviceMeasureCalibrator measItem; - measItem.item_data_id = item[1]; - measItem.maximum_error_formula = item[10];//最大允许误差(公式) - measItem.error_param_a = item[11];//误差参数a - measItem.error_param_b = item[12];//误差参数b - measItem.params = item[2];//参数 - measItem.capacity=item[3];//量 - measItem.unit=item[4];//单位 - measItem.frequency=item[5];//频率 - measItem.frequency_unit=item[6];//频率单位 - measItem.range_range=item[7];//量程 - measItem.standard_value=item[8];//标准值(输入字段,特殊:指针式万用表输出字段) - measItem.indicating_value=item[15];//示值(输出字段,特殊:指针式万用表输入字段) - measItem.maximum_error=item[10];//最大允许误差(值) - //measItem.absolute_error=item[11];//绝对误差 - measItem.resolution=item[9];//分辨力 - measItem.measure_indication_value=item[19];//被检表示值 - measureCalList.append(measItem); - row++; - } + //tableWidget->setRowCount(data.count()); + int rowCount = 0; + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = ui->tableWidgetCheck->rowCount(); + ui->tableWidgetCheck->insertRow(rowCount); + ui->tableWidgetCheck->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jtableWidgetCheck->setItem(i, j, new QTableWidgetItem(dataRes[i][j])); } } +} + +void CheckWindow::connectDevice(){ if(connectList.length()>0&&connectList[0].type==0) deviceEngine.openDevice(connectList[0].programInterface.visa,"Visa"); if(connectList.length()>1&&connectList[1].type==1) @@ -659,52 +740,140 @@ return nullptr; } +int CheckWindow::getIndexByHeader(QString sLabel,QString sName){ + const auto &headrs = headTableList.value(sLabel); + for(int i=0;iinstruct_config.split(";"); - if(sList.length()>0){ - for (QString& sCmd : sList){ - standardEngine.sendData(sCmd); - } - } - } - } - //被检设备读数 - if(deviceEngine.getState()){ - InstructionLib *instrcutLib = getCmdByCheckName(0,item.params); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); - if(sList.length()>0){ - for (QString& sCmd : sList){ - deviceEngine.sendData(sCmd); - } - } - Delay_MSec(2000); - sRet = deviceEngine.queryData(instrcutLib->instruct_read); - } - } - // - if(sRet==""){ - bool bOk = false; - double dRet = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + initCheckTable(i); + QString sLabel = headTableList.keys()[i]; + QList dataRes = caliDataList.value(sLabel); - if (bOk) { - sRet = QString::number(dRet); + for (int i = 0; i < dataRes.count(); ++i) { + QString sRet=""; + double dStdValue,dError; + //标准器输出 + int idx= getIndexByHeader(sLabel,"检定项目"); + QString sParam = dataRes[i][idx]; + if(standardEngine.getState()){ + InstructionLib *instrcutLib = getCmdByCheckName(1,sParam); + if(instrcutLib!=nullptr){ + QStringList sList = instrcutLib->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + standardEngine.sendData(sCmd); + qDebug() << "standard cmds:" << sCmd; + } + } + } } + //被检设备读数 + if(deviceEngine.getState()){ + InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); + if(instrcutLib!=nullptr){ + QStringList sList = instrcutLib->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + deviceEngine.sendData(sCmd); + qDebug() << "config cmds:" << sCmd; + } + } + Delay_MSec(2000); + qDebug() << "query cmds:" << instrcutLib->instruct_read; + sRet = deviceEngine.queryData(instrcutLib->instruct_read); + idx= getIndexByHeader(sLabel,"单位"); + dStdValue = transUnit(sRet,dataRes[i][idx]); + } + } + // + if(sRet==""){ + bool bOk = false; + dStdValue = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + + if (bOk) { + sRet = QString::number(dStdValue); + //idx= getIndexByHeader(sLabel,"单位"); + //dStdValue = transUnit(sRet,dataRes[i][idx]); + //sRet = QString::number(dStdValue); + } + } + //item.measure_indication_value = sRet; + if(iEquipType==1){ + idx= getIndexByHeader(sLabel,"示值"); + dataRes[i][idx] = QString::number(dStdValue); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dStdValue))); //示值 + idx= getIndexByHeader(sLabel,"标准值"); + double dTmp = dataRes[i][idx].toDouble(); + dError = dStdValue-dTmp; + idx= getIndexByHeader(sLabel,"绝对误差"); + dataRes[i][idx] = QString::number(dError); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dError))); //示值 + } + //ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); } - item.measure_indication_value = sRet; - ui->tableWidgetCheck->setItem(i,15,new QTableWidgetItem(sRet)); //示值 - ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); + caliDataList.insert(sLabel,dataRes); } +// initCheckTable(); +// for(int i=0;iinstruct_config.split(";"); +// if(sList.length()>0){ +// for (QString& sCmd : sList){ +// standardEngine.sendData(sCmd); +// } +// } +// } +// } +// //被检设备读数 +// if(deviceEngine.getState()){ +// InstructionLib *instrcutLib = getCmdByCheckName(0,item.params); +// if(instrcutLib!=nullptr){ +// QStringList sList = instrcutLib->instruct_config.split(";"); +// if(sList.length()>0){ +// for (QString& sCmd : sList){ +// deviceEngine.sendData(sCmd); +// } +// } +// Delay_MSec(2000); +// sRet = deviceEngine.queryData(instrcutLib->instruct_read); +// } +// } +// // +// if(sRet==""){ +// bool bOk = false; +// double dRet = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + +// if (bOk) { +// sRet = QString::number(dRet); +// } +// } +// item.measure_indication_value = sRet; +// ui->tableWidgetCheck->setItem(i,15,new QTableWidgetItem(sRet)); //示值 +// ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); +// } } void CheckWindow::Delay_MSec(unsigned int msec) diff --git a/softwareDirectory/AutoVerScheme/checkwindow.h b/softwareDirectory/AutoVerScheme/checkwindow.h index 2655417..99a9d96 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.h +++ b/softwareDirectory/AutoVerScheme/checkwindow.h @@ -68,12 +68,15 @@ void getCheckMethod(); void initDeviceInfo(QString sId); void deleteItem(QLayout *layout); - void initCheckTable(); + void initCheckTable(int idx); InstructionLib* getCmdByCheckName(int idx,QString name); void Delay_MSec(unsigned int msec); void SetHomePaheCombox(Dept task); bool comboBoxContainsItem(QComboBox *comboBox, const QString &itemText); void showStandard(); + void connectDevice(); + int getIndexByHeader(QString sLabel,QString sName); + double transUnit(QString sData,QString sUnit); private: Ui::CheckWindow *ui; QList programList; @@ -90,6 +93,10 @@ QMap> caliDataList; QMap headTableList; QList catDeviceList; + int curHeadIdx=-1; + int iEquipType=1; + QMap unitTransList; + QString standardId; }; #endif // CHECKWINDOW_H diff --git a/softwareDirectory/AutoVerScheme/checkwindow.cpp b/softwareDirectory/AutoVerScheme/checkwindow.cpp index 8e5d8ea..b528b5e 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.cpp +++ b/softwareDirectory/AutoVerScheme/checkwindow.cpp @@ -41,6 +41,18 @@ ui->comboBoxName->addItem("ALL"); ui->comboBoxModal->addItem("ALL"); ui->comboBoxCustomer->addItem("ALL"); + + //统一定义单位转换系数 + unitTransList.insert("V",1); + unitTransList.insert("MV",1000); + unitTransList.insert("A",1); + unitTransList.insert("MA",1000); + unitTransList.insert("UA",1000000); + unitTransList.insert("W",1); + unitTransList.insert("KW",0.001); + unitTransList.insert("Ω",1); + unitTransList.insert("KΩ",0.001); + unitTransList.insert("KΩ",0.000001); getCheckDevice(); //ui->stackedWidget_2->setCurrentIndex(1); //ui->tableWidgetDevice->verticalHeader()->sectionResizeMode(QHeaderView::Stretch); @@ -153,6 +165,7 @@ void CheckWindow::initDeviceInfo(QString sId) { + standardId = sId; QString strStyle = QString("QLabel{image:url(%1);}").arg(programInfo.img_path); qDebug() << "strStyle:" << strStyle; ui->label_8->setStyleSheet(strStyle); @@ -184,7 +197,7 @@ if(addrList.length()>0){ info.programInterface = addrList[0]; } - info.cmdList = BaseCommonApi::getInstructionLib(info.id); + info.cmdList = BaseCommonApi::getInstructionLib(programInfo.id); connectList.append(info); addrList.clear(); } @@ -266,6 +279,10 @@ { //QStringList idList=programInfo.tested_device_id.split(","); QString deviceId = selectTaskList[0].sample_id; + QList CliTable = BaseCommonApi::getJudgeCalibrationTable(deviceId); + if(CliTable.length()>0){ + iEquipType = CliTable[0].belong_standard_equipment.toInt(); + } //QStringList headlist; headList.clear(); calibrationList.clear(); @@ -276,6 +293,7 @@ //tableWidgetItem ui->tableWidget_Point->clearContents(); ui->tableWidget_Point->setRowCount(0); + deleteItem(ui->HeadListLayout); //循环数据 int rowCount=0; int row=0; @@ -296,7 +314,8 @@ // ======================================================================================== // 数据循环显示 // =================================================================================== - const auto &dataRes = caliDataList.value(headTableList.keys()[index]); + QString sLabel = headTableList.keys()[index]; + const auto &dataRes = caliDataList.value(sLabel); //tableWidget->setRowCount(data.count()); for (int i = 0; i < dataRes.count(); ++i) { @@ -309,11 +328,43 @@ ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1")); row++; } + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(sLabel, this); + //设置样式 + // 设置按钮大小为 56x20 + button->setFixedSize(85, 40); + button->setCheckable(true); + button->setAutoExclusive(true); + //设置第一个按钮选中状态 + if(index==0){ button->setChecked(true);} + //button->setc(true); + // 设置按钮样式表 + button->setStyleSheet("QPushButton {" + "border: 1px solid white;" // 白色边框 + "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 + "background-color: rgba(242, 242, 242, 1);" // 浅灰色背景 + "}" + "QPushButton:hover {" + "background-color: rgba(215, 215, 215, 1);;" // 鼠标悬停时变为深灰色背景 + "}" + "QPushButton:checked {" + "color: white;" + "background-color: rgb(74, 102, 186);" // 选中时变为蓝色背景 + "}"); + + ui->HeadListLayout->addWidget(button); + connect(button, &QPushButton::clicked, this, [this,index]() { + //tackedWidget->setCurrentIndex(index); + initCheckTable(index); + }); ++index; } + ui->HeadListLayout->addStretch(); } - ui->stackedWidget_2->setCurrentIndex(1); + initCheckTable(0); } void CheckWindow::on_deviceButton_clicked(Dept task,int idx) @@ -371,8 +422,8 @@ { DialogCheckResult* dlg = new DialogCheckResult; dlg->taskList =selectTaskList; - dlg->deviceId = programInfo.tested_device_id; - dlg->initCheckTable(measureCalList,headList,programInfo.standard_device_id); + dlg->deviceId = selectTaskList[0].sample_id; + dlg->initCheckTable(&caliDataList,&headTableList,standardId); dlg->setModal(true); dlg->show(); } @@ -592,56 +643,86 @@ } } -void CheckWindow::initCheckTable() +void CheckWindow::initCheckTable(int idx) { +// ui->tableWidgetCheck->clearContents(); +// ui->tableWidgetCheck->setRowCount(0); +// ui->tableWidgetCheck->setColumnCount(0); +// int rowCount = 0; +// int row=0; +// ui->tableWidgetCheck->setColumnCount(headList.count()); +// ui->tableWidgetCheck->setHorizontalHeaderLabels(headList); +// for(int i=0;itableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); +// } +// measureCalList.clear(); +// for(int i=0;itableWidget_Point->rowCount();i++){ +// Qt::CheckState state = ui->tableWidget_Point->item(i,0)->checkState(); +// if(state == Qt::Checked){ +// QStringList& item = calibrationList[i]; +// int cnt = ui->tableWidget_Point->item(i,2)->text().toInt(); +// for(int j=0;jtableWidgetCheck->rowCount(); +// ui->tableWidgetCheck->insertRow(rowCount); +// ui->tableWidgetCheck->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); +// //循环读取值 headlist,count是列的数量 +// for(int k=1;ktableWidgetCheck->setItem(row, k, new QTableWidgetItem(item[k])); +// } +// SaveDeviceMeasureCalibrator measItem; +// measItem.item_data_id = item[1]; +// measItem.maximum_error_formula = item[10];//最大允许误差(公式) +// measItem.error_param_a = item[11];//误差参数a +// measItem.error_param_b = item[12];//误差参数b +// measItem.params = item[2];//参数 +// measItem.capacity=item[3];//量 +// measItem.unit=item[4];//单位 +// measItem.frequency=item[5];//频率 +// measItem.frequency_unit=item[6];//频率单位 +// measItem.range_range=item[7];//量程 +// measItem.standard_value=item[8];//标准值(输入字段,特殊:指针式万用表输出字段) +// measItem.indicating_value=item[15];//示值(输出字段,特殊:指针式万用表输入字段) +// measItem.maximum_error=item[10];//最大允许误差(值) +// //measItem.absolute_error=item[11];//绝对误差 +// measItem.resolution=item[9];//分辨力 +// measItem.measure_indication_value=item[19];//被检表示值 +// measureCalList.append(measItem); +// row++; +// } +// } +// } + if(curHeadIdx==idx) + return; + curHeadIdx = idx; + QString sLabel = headTableList.keys()[curHeadIdx]; + const auto &dataRes = caliDataList.value(sLabel); + const auto &headrs = headTableList.value(sLabel); ui->tableWidgetCheck->clearContents(); ui->tableWidgetCheck->setRowCount(0); ui->tableWidgetCheck->setColumnCount(0); - int rowCount = 0; - int row=0; - ui->tableWidgetCheck->setColumnCount(headList.count()); - ui->tableWidgetCheck->setHorizontalHeaderLabels(headList); - for(int i=0;itableWidgetCheck->setColumnCount(headrs.count()); + ui->tableWidgetCheck->setHorizontalHeaderLabels(headrs); + for(int i=0;itableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); } - measureCalList.clear(); - for(int i=0;itableWidget_Point->rowCount();i++){ - Qt::CheckState state = ui->tableWidget_Point->item(i,0)->checkState(); - if(state == Qt::Checked){ - QStringList& item = calibrationList[i]; - int cnt = ui->tableWidget_Point->item(i,2)->text().toInt(); - for(int j=0;jtableWidgetCheck->rowCount(); - ui->tableWidgetCheck->insertRow(rowCount); - ui->tableWidgetCheck->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int k=1;ktableWidgetCheck->setItem(row, k, new QTableWidgetItem(item[k])); - } - SaveDeviceMeasureCalibrator measItem; - measItem.item_data_id = item[1]; - measItem.maximum_error_formula = item[10];//最大允许误差(公式) - measItem.error_param_a = item[11];//误差参数a - measItem.error_param_b = item[12];//误差参数b - measItem.params = item[2];//参数 - measItem.capacity=item[3];//量 - measItem.unit=item[4];//单位 - measItem.frequency=item[5];//频率 - measItem.frequency_unit=item[6];//频率单位 - measItem.range_range=item[7];//量程 - measItem.standard_value=item[8];//标准值(输入字段,特殊:指针式万用表输出字段) - measItem.indicating_value=item[15];//示值(输出字段,特殊:指针式万用表输入字段) - measItem.maximum_error=item[10];//最大允许误差(值) - //measItem.absolute_error=item[11];//绝对误差 - measItem.resolution=item[9];//分辨力 - measItem.measure_indication_value=item[19];//被检表示值 - measureCalList.append(measItem); - row++; - } + //tableWidget->setRowCount(data.count()); + int rowCount = 0; + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = ui->tableWidgetCheck->rowCount(); + ui->tableWidgetCheck->insertRow(rowCount); + ui->tableWidgetCheck->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jtableWidgetCheck->setItem(i, j, new QTableWidgetItem(dataRes[i][j])); } } +} + +void CheckWindow::connectDevice(){ if(connectList.length()>0&&connectList[0].type==0) deviceEngine.openDevice(connectList[0].programInterface.visa,"Visa"); if(connectList.length()>1&&connectList[1].type==1) @@ -659,52 +740,140 @@ return nullptr; } +int CheckWindow::getIndexByHeader(QString sLabel,QString sName){ + const auto &headrs = headTableList.value(sLabel); + for(int i=0;iinstruct_config.split(";"); - if(sList.length()>0){ - for (QString& sCmd : sList){ - standardEngine.sendData(sCmd); - } - } - } - } - //被检设备读数 - if(deviceEngine.getState()){ - InstructionLib *instrcutLib = getCmdByCheckName(0,item.params); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); - if(sList.length()>0){ - for (QString& sCmd : sList){ - deviceEngine.sendData(sCmd); - } - } - Delay_MSec(2000); - sRet = deviceEngine.queryData(instrcutLib->instruct_read); - } - } - // - if(sRet==""){ - bool bOk = false; - double dRet = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + initCheckTable(i); + QString sLabel = headTableList.keys()[i]; + QList dataRes = caliDataList.value(sLabel); - if (bOk) { - sRet = QString::number(dRet); + for (int i = 0; i < dataRes.count(); ++i) { + QString sRet=""; + double dStdValue,dError; + //标准器输出 + int idx= getIndexByHeader(sLabel,"检定项目"); + QString sParam = dataRes[i][idx]; + if(standardEngine.getState()){ + InstructionLib *instrcutLib = getCmdByCheckName(1,sParam); + if(instrcutLib!=nullptr){ + QStringList sList = instrcutLib->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + standardEngine.sendData(sCmd); + qDebug() << "standard cmds:" << sCmd; + } + } + } } + //被检设备读数 + if(deviceEngine.getState()){ + InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); + if(instrcutLib!=nullptr){ + QStringList sList = instrcutLib->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + deviceEngine.sendData(sCmd); + qDebug() << "config cmds:" << sCmd; + } + } + Delay_MSec(2000); + qDebug() << "query cmds:" << instrcutLib->instruct_read; + sRet = deviceEngine.queryData(instrcutLib->instruct_read); + idx= getIndexByHeader(sLabel,"单位"); + dStdValue = transUnit(sRet,dataRes[i][idx]); + } + } + // + if(sRet==""){ + bool bOk = false; + dStdValue = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + + if (bOk) { + sRet = QString::number(dStdValue); + //idx= getIndexByHeader(sLabel,"单位"); + //dStdValue = transUnit(sRet,dataRes[i][idx]); + //sRet = QString::number(dStdValue); + } + } + //item.measure_indication_value = sRet; + if(iEquipType==1){ + idx= getIndexByHeader(sLabel,"示值"); + dataRes[i][idx] = QString::number(dStdValue); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dStdValue))); //示值 + idx= getIndexByHeader(sLabel,"标准值"); + double dTmp = dataRes[i][idx].toDouble(); + dError = dStdValue-dTmp; + idx= getIndexByHeader(sLabel,"绝对误差"); + dataRes[i][idx] = QString::number(dError); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dError))); //示值 + } + //ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); } - item.measure_indication_value = sRet; - ui->tableWidgetCheck->setItem(i,15,new QTableWidgetItem(sRet)); //示值 - ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); + caliDataList.insert(sLabel,dataRes); } +// initCheckTable(); +// for(int i=0;iinstruct_config.split(";"); +// if(sList.length()>0){ +// for (QString& sCmd : sList){ +// standardEngine.sendData(sCmd); +// } +// } +// } +// } +// //被检设备读数 +// if(deviceEngine.getState()){ +// InstructionLib *instrcutLib = getCmdByCheckName(0,item.params); +// if(instrcutLib!=nullptr){ +// QStringList sList = instrcutLib->instruct_config.split(";"); +// if(sList.length()>0){ +// for (QString& sCmd : sList){ +// deviceEngine.sendData(sCmd); +// } +// } +// Delay_MSec(2000); +// sRet = deviceEngine.queryData(instrcutLib->instruct_read); +// } +// } +// // +// if(sRet==""){ +// bool bOk = false; +// double dRet = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + +// if (bOk) { +// sRet = QString::number(dRet); +// } +// } +// item.measure_indication_value = sRet; +// ui->tableWidgetCheck->setItem(i,15,new QTableWidgetItem(sRet)); //示值 +// ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); +// } } void CheckWindow::Delay_MSec(unsigned int msec) diff --git a/softwareDirectory/AutoVerScheme/checkwindow.h b/softwareDirectory/AutoVerScheme/checkwindow.h index 2655417..99a9d96 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.h +++ b/softwareDirectory/AutoVerScheme/checkwindow.h @@ -68,12 +68,15 @@ void getCheckMethod(); void initDeviceInfo(QString sId); void deleteItem(QLayout *layout); - void initCheckTable(); + void initCheckTable(int idx); InstructionLib* getCmdByCheckName(int idx,QString name); void Delay_MSec(unsigned int msec); void SetHomePaheCombox(Dept task); bool comboBoxContainsItem(QComboBox *comboBox, const QString &itemText); void showStandard(); + void connectDevice(); + int getIndexByHeader(QString sLabel,QString sName); + double transUnit(QString sData,QString sUnit); private: Ui::CheckWindow *ui; QList programList; @@ -90,6 +93,10 @@ QMap> caliDataList; QMap headTableList; QList catDeviceList; + int curHeadIdx=-1; + int iEquipType=1; + QMap unitTransList; + QString standardId; }; #endif // CHECKWINDOW_H diff --git a/softwareDirectory/AutoVerScheme/checkwindow.ui b/softwareDirectory/AutoVerScheme/checkwindow.ui index e27b34e..e81b305 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.ui +++ b/softwareDirectory/AutoVerScheme/checkwindow.ui @@ -1921,6 +1921,9 @@ + + + diff --git a/softwareDirectory/AutoVerScheme/checkwindow.cpp b/softwareDirectory/AutoVerScheme/checkwindow.cpp index 8e5d8ea..b528b5e 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.cpp +++ b/softwareDirectory/AutoVerScheme/checkwindow.cpp @@ -41,6 +41,18 @@ ui->comboBoxName->addItem("ALL"); ui->comboBoxModal->addItem("ALL"); ui->comboBoxCustomer->addItem("ALL"); + + //统一定义单位转换系数 + unitTransList.insert("V",1); + unitTransList.insert("MV",1000); + unitTransList.insert("A",1); + unitTransList.insert("MA",1000); + unitTransList.insert("UA",1000000); + unitTransList.insert("W",1); + unitTransList.insert("KW",0.001); + unitTransList.insert("Ω",1); + unitTransList.insert("KΩ",0.001); + unitTransList.insert("KΩ",0.000001); getCheckDevice(); //ui->stackedWidget_2->setCurrentIndex(1); //ui->tableWidgetDevice->verticalHeader()->sectionResizeMode(QHeaderView::Stretch); @@ -153,6 +165,7 @@ void CheckWindow::initDeviceInfo(QString sId) { + standardId = sId; QString strStyle = QString("QLabel{image:url(%1);}").arg(programInfo.img_path); qDebug() << "strStyle:" << strStyle; ui->label_8->setStyleSheet(strStyle); @@ -184,7 +197,7 @@ if(addrList.length()>0){ info.programInterface = addrList[0]; } - info.cmdList = BaseCommonApi::getInstructionLib(info.id); + info.cmdList = BaseCommonApi::getInstructionLib(programInfo.id); connectList.append(info); addrList.clear(); } @@ -266,6 +279,10 @@ { //QStringList idList=programInfo.tested_device_id.split(","); QString deviceId = selectTaskList[0].sample_id; + QList CliTable = BaseCommonApi::getJudgeCalibrationTable(deviceId); + if(CliTable.length()>0){ + iEquipType = CliTable[0].belong_standard_equipment.toInt(); + } //QStringList headlist; headList.clear(); calibrationList.clear(); @@ -276,6 +293,7 @@ //tableWidgetItem ui->tableWidget_Point->clearContents(); ui->tableWidget_Point->setRowCount(0); + deleteItem(ui->HeadListLayout); //循环数据 int rowCount=0; int row=0; @@ -296,7 +314,8 @@ // ======================================================================================== // 数据循环显示 // =================================================================================== - const auto &dataRes = caliDataList.value(headTableList.keys()[index]); + QString sLabel = headTableList.keys()[index]; + const auto &dataRes = caliDataList.value(sLabel); //tableWidget->setRowCount(data.count()); for (int i = 0; i < dataRes.count(); ++i) { @@ -309,11 +328,43 @@ ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1")); row++; } + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(sLabel, this); + //设置样式 + // 设置按钮大小为 56x20 + button->setFixedSize(85, 40); + button->setCheckable(true); + button->setAutoExclusive(true); + //设置第一个按钮选中状态 + if(index==0){ button->setChecked(true);} + //button->setc(true); + // 设置按钮样式表 + button->setStyleSheet("QPushButton {" + "border: 1px solid white;" // 白色边框 + "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 + "background-color: rgba(242, 242, 242, 1);" // 浅灰色背景 + "}" + "QPushButton:hover {" + "background-color: rgba(215, 215, 215, 1);;" // 鼠标悬停时变为深灰色背景 + "}" + "QPushButton:checked {" + "color: white;" + "background-color: rgb(74, 102, 186);" // 选中时变为蓝色背景 + "}"); + + ui->HeadListLayout->addWidget(button); + connect(button, &QPushButton::clicked, this, [this,index]() { + //tackedWidget->setCurrentIndex(index); + initCheckTable(index); + }); ++index; } + ui->HeadListLayout->addStretch(); } - ui->stackedWidget_2->setCurrentIndex(1); + initCheckTable(0); } void CheckWindow::on_deviceButton_clicked(Dept task,int idx) @@ -371,8 +422,8 @@ { DialogCheckResult* dlg = new DialogCheckResult; dlg->taskList =selectTaskList; - dlg->deviceId = programInfo.tested_device_id; - dlg->initCheckTable(measureCalList,headList,programInfo.standard_device_id); + dlg->deviceId = selectTaskList[0].sample_id; + dlg->initCheckTable(&caliDataList,&headTableList,standardId); dlg->setModal(true); dlg->show(); } @@ -592,56 +643,86 @@ } } -void CheckWindow::initCheckTable() +void CheckWindow::initCheckTable(int idx) { +// ui->tableWidgetCheck->clearContents(); +// ui->tableWidgetCheck->setRowCount(0); +// ui->tableWidgetCheck->setColumnCount(0); +// int rowCount = 0; +// int row=0; +// ui->tableWidgetCheck->setColumnCount(headList.count()); +// ui->tableWidgetCheck->setHorizontalHeaderLabels(headList); +// for(int i=0;itableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); +// } +// measureCalList.clear(); +// for(int i=0;itableWidget_Point->rowCount();i++){ +// Qt::CheckState state = ui->tableWidget_Point->item(i,0)->checkState(); +// if(state == Qt::Checked){ +// QStringList& item = calibrationList[i]; +// int cnt = ui->tableWidget_Point->item(i,2)->text().toInt(); +// for(int j=0;jtableWidgetCheck->rowCount(); +// ui->tableWidgetCheck->insertRow(rowCount); +// ui->tableWidgetCheck->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); +// //循环读取值 headlist,count是列的数量 +// for(int k=1;ktableWidgetCheck->setItem(row, k, new QTableWidgetItem(item[k])); +// } +// SaveDeviceMeasureCalibrator measItem; +// measItem.item_data_id = item[1]; +// measItem.maximum_error_formula = item[10];//最大允许误差(公式) +// measItem.error_param_a = item[11];//误差参数a +// measItem.error_param_b = item[12];//误差参数b +// measItem.params = item[2];//参数 +// measItem.capacity=item[3];//量 +// measItem.unit=item[4];//单位 +// measItem.frequency=item[5];//频率 +// measItem.frequency_unit=item[6];//频率单位 +// measItem.range_range=item[7];//量程 +// measItem.standard_value=item[8];//标准值(输入字段,特殊:指针式万用表输出字段) +// measItem.indicating_value=item[15];//示值(输出字段,特殊:指针式万用表输入字段) +// measItem.maximum_error=item[10];//最大允许误差(值) +// //measItem.absolute_error=item[11];//绝对误差 +// measItem.resolution=item[9];//分辨力 +// measItem.measure_indication_value=item[19];//被检表示值 +// measureCalList.append(measItem); +// row++; +// } +// } +// } + if(curHeadIdx==idx) + return; + curHeadIdx = idx; + QString sLabel = headTableList.keys()[curHeadIdx]; + const auto &dataRes = caliDataList.value(sLabel); + const auto &headrs = headTableList.value(sLabel); ui->tableWidgetCheck->clearContents(); ui->tableWidgetCheck->setRowCount(0); ui->tableWidgetCheck->setColumnCount(0); - int rowCount = 0; - int row=0; - ui->tableWidgetCheck->setColumnCount(headList.count()); - ui->tableWidgetCheck->setHorizontalHeaderLabels(headList); - for(int i=0;itableWidgetCheck->setColumnCount(headrs.count()); + ui->tableWidgetCheck->setHorizontalHeaderLabels(headrs); + for(int i=0;itableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); } - measureCalList.clear(); - for(int i=0;itableWidget_Point->rowCount();i++){ - Qt::CheckState state = ui->tableWidget_Point->item(i,0)->checkState(); - if(state == Qt::Checked){ - QStringList& item = calibrationList[i]; - int cnt = ui->tableWidget_Point->item(i,2)->text().toInt(); - for(int j=0;jtableWidgetCheck->rowCount(); - ui->tableWidgetCheck->insertRow(rowCount); - ui->tableWidgetCheck->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int k=1;ktableWidgetCheck->setItem(row, k, new QTableWidgetItem(item[k])); - } - SaveDeviceMeasureCalibrator measItem; - measItem.item_data_id = item[1]; - measItem.maximum_error_formula = item[10];//最大允许误差(公式) - measItem.error_param_a = item[11];//误差参数a - measItem.error_param_b = item[12];//误差参数b - measItem.params = item[2];//参数 - measItem.capacity=item[3];//量 - measItem.unit=item[4];//单位 - measItem.frequency=item[5];//频率 - measItem.frequency_unit=item[6];//频率单位 - measItem.range_range=item[7];//量程 - measItem.standard_value=item[8];//标准值(输入字段,特殊:指针式万用表输出字段) - measItem.indicating_value=item[15];//示值(输出字段,特殊:指针式万用表输入字段) - measItem.maximum_error=item[10];//最大允许误差(值) - //measItem.absolute_error=item[11];//绝对误差 - measItem.resolution=item[9];//分辨力 - measItem.measure_indication_value=item[19];//被检表示值 - measureCalList.append(measItem); - row++; - } + //tableWidget->setRowCount(data.count()); + int rowCount = 0; + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = ui->tableWidgetCheck->rowCount(); + ui->tableWidgetCheck->insertRow(rowCount); + ui->tableWidgetCheck->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jtableWidgetCheck->setItem(i, j, new QTableWidgetItem(dataRes[i][j])); } } +} + +void CheckWindow::connectDevice(){ if(connectList.length()>0&&connectList[0].type==0) deviceEngine.openDevice(connectList[0].programInterface.visa,"Visa"); if(connectList.length()>1&&connectList[1].type==1) @@ -659,52 +740,140 @@ return nullptr; } +int CheckWindow::getIndexByHeader(QString sLabel,QString sName){ + const auto &headrs = headTableList.value(sLabel); + for(int i=0;iinstruct_config.split(";"); - if(sList.length()>0){ - for (QString& sCmd : sList){ - standardEngine.sendData(sCmd); - } - } - } - } - //被检设备读数 - if(deviceEngine.getState()){ - InstructionLib *instrcutLib = getCmdByCheckName(0,item.params); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); - if(sList.length()>0){ - for (QString& sCmd : sList){ - deviceEngine.sendData(sCmd); - } - } - Delay_MSec(2000); - sRet = deviceEngine.queryData(instrcutLib->instruct_read); - } - } - // - if(sRet==""){ - bool bOk = false; - double dRet = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + initCheckTable(i); + QString sLabel = headTableList.keys()[i]; + QList dataRes = caliDataList.value(sLabel); - if (bOk) { - sRet = QString::number(dRet); + for (int i = 0; i < dataRes.count(); ++i) { + QString sRet=""; + double dStdValue,dError; + //标准器输出 + int idx= getIndexByHeader(sLabel,"检定项目"); + QString sParam = dataRes[i][idx]; + if(standardEngine.getState()){ + InstructionLib *instrcutLib = getCmdByCheckName(1,sParam); + if(instrcutLib!=nullptr){ + QStringList sList = instrcutLib->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + standardEngine.sendData(sCmd); + qDebug() << "standard cmds:" << sCmd; + } + } + } } + //被检设备读数 + if(deviceEngine.getState()){ + InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); + if(instrcutLib!=nullptr){ + QStringList sList = instrcutLib->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + deviceEngine.sendData(sCmd); + qDebug() << "config cmds:" << sCmd; + } + } + Delay_MSec(2000); + qDebug() << "query cmds:" << instrcutLib->instruct_read; + sRet = deviceEngine.queryData(instrcutLib->instruct_read); + idx= getIndexByHeader(sLabel,"单位"); + dStdValue = transUnit(sRet,dataRes[i][idx]); + } + } + // + if(sRet==""){ + bool bOk = false; + dStdValue = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + + if (bOk) { + sRet = QString::number(dStdValue); + //idx= getIndexByHeader(sLabel,"单位"); + //dStdValue = transUnit(sRet,dataRes[i][idx]); + //sRet = QString::number(dStdValue); + } + } + //item.measure_indication_value = sRet; + if(iEquipType==1){ + idx= getIndexByHeader(sLabel,"示值"); + dataRes[i][idx] = QString::number(dStdValue); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dStdValue))); //示值 + idx= getIndexByHeader(sLabel,"标准值"); + double dTmp = dataRes[i][idx].toDouble(); + dError = dStdValue-dTmp; + idx= getIndexByHeader(sLabel,"绝对误差"); + dataRes[i][idx] = QString::number(dError); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dError))); //示值 + } + //ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); } - item.measure_indication_value = sRet; - ui->tableWidgetCheck->setItem(i,15,new QTableWidgetItem(sRet)); //示值 - ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); + caliDataList.insert(sLabel,dataRes); } +// initCheckTable(); +// for(int i=0;iinstruct_config.split(";"); +// if(sList.length()>0){ +// for (QString& sCmd : sList){ +// standardEngine.sendData(sCmd); +// } +// } +// } +// } +// //被检设备读数 +// if(deviceEngine.getState()){ +// InstructionLib *instrcutLib = getCmdByCheckName(0,item.params); +// if(instrcutLib!=nullptr){ +// QStringList sList = instrcutLib->instruct_config.split(";"); +// if(sList.length()>0){ +// for (QString& sCmd : sList){ +// deviceEngine.sendData(sCmd); +// } +// } +// Delay_MSec(2000); +// sRet = deviceEngine.queryData(instrcutLib->instruct_read); +// } +// } +// // +// if(sRet==""){ +// bool bOk = false; +// double dRet = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + +// if (bOk) { +// sRet = QString::number(dRet); +// } +// } +// item.measure_indication_value = sRet; +// ui->tableWidgetCheck->setItem(i,15,new QTableWidgetItem(sRet)); //示值 +// ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); +// } } void CheckWindow::Delay_MSec(unsigned int msec) diff --git a/softwareDirectory/AutoVerScheme/checkwindow.h b/softwareDirectory/AutoVerScheme/checkwindow.h index 2655417..99a9d96 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.h +++ b/softwareDirectory/AutoVerScheme/checkwindow.h @@ -68,12 +68,15 @@ void getCheckMethod(); void initDeviceInfo(QString sId); void deleteItem(QLayout *layout); - void initCheckTable(); + void initCheckTable(int idx); InstructionLib* getCmdByCheckName(int idx,QString name); void Delay_MSec(unsigned int msec); void SetHomePaheCombox(Dept task); bool comboBoxContainsItem(QComboBox *comboBox, const QString &itemText); void showStandard(); + void connectDevice(); + int getIndexByHeader(QString sLabel,QString sName); + double transUnit(QString sData,QString sUnit); private: Ui::CheckWindow *ui; QList programList; @@ -90,6 +93,10 @@ QMap> caliDataList; QMap headTableList; QList catDeviceList; + int curHeadIdx=-1; + int iEquipType=1; + QMap unitTransList; + QString standardId; }; #endif // CHECKWINDOW_H diff --git a/softwareDirectory/AutoVerScheme/checkwindow.ui b/softwareDirectory/AutoVerScheme/checkwindow.ui index e27b34e..e81b305 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.ui +++ b/softwareDirectory/AutoVerScheme/checkwindow.ui @@ -1921,6 +1921,9 @@ + + + diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp index b4a2d42..cd2427a 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp @@ -8,7 +8,7 @@ ui(new Ui::DialogCheckResult) { ui->setupUi(this); - + ui->tableWidget->verticalHeader()->setParent(nullptr); } DialogCheckResult::~DialogCheckResult() @@ -16,43 +16,122 @@ delete ui; } -void DialogCheckResult::initCheckTable(QList measList,QStringList headList,QString sID) +void DialogCheckResult::deleteItem(QLayout *layout) { - ui->tableWidget->verticalHeader()->setParent(nullptr); - ui->tableWidget->setColumnCount(headList.count()); - ui->tableWidget->setHorizontalHeaderLabels(headList); - for(int i=0;itableWidget->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); - } - int rowCount=0; - int row=0; - measureCalList = measList; - measHeadList = headList; - stdId = sID; - for (const SaveDeviceMeasureCalibrator& measItem : measList) - { - //获取行号 并进行添加行 - rowCount = ui->tableWidget->rowCount(); - ui->tableWidget->insertRow(rowCount); - //添加 序号 - ui->tableWidget->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); + QLayoutItem *child; + while ((child = layout->takeAt(0)) != nullptr) + { + //setParent为NULL,防止删除之后界面不消失 + if(child->widget()) + { + child->widget()->setParent(nullptr); + delete child->widget(); + } + else if (child->layout()) + { + deleteItem(child->layout()); + child->layout()->deleteLater(); + } + delete child; + } +} +void DialogCheckResult::initCalDataTable(int idx) +{ + if(curHeadIdx==idx) + return; + curHeadIdx = idx; + QString sLabel = headTableList->keys()[curHeadIdx]; + const auto &dataRes = caliDataList->value(sLabel); + const auto &headrs = headTableList->value(sLabel); + ui->tableWidget->clearContents(); + ui->tableWidget->setRowCount(0); + ui->tableWidget->setColumnCount(0); + ui->tableWidget->setColumnCount(headrs.count()); + ui->tableWidget->setHorizontalHeaderLabels(headrs); + for(int i=0;itableWidget->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); + } + //tableWidget->setRowCount(data.count()); + int rowCount = 0; + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = ui->tableWidget->rowCount(); + ui->tableWidget->insertRow(rowCount); + ui->tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jtableWidget->setItem(i, j, new QTableWidgetItem(dataRes[i][j])); + } + } +} - ui->tableWidget->setItem(row, 2, new QTableWidgetItem(measItem.params)); - ui->tableWidget->setItem(row, 3, new QTableWidgetItem(measItem.capacity)); - ui->tableWidget->setItem(row, 4, new QTableWidgetItem(measItem.unit)); - ui->tableWidget->setItem(row, 5, new QTableWidgetItem(measItem.frequency)); - ui->tableWidget->setItem(row, 6, new QTableWidgetItem(measItem.frequency_unit)); - ui->tableWidget->setItem(row, 7, new QTableWidgetItem(measItem.range_range)); - ui->tableWidget->setItem(row, 8, new QTableWidgetItem(measItem.standard_value)); - ui->tableWidget->setItem(row, 9, new QTableWidgetItem(measItem.resolution)); - ui->tableWidget->setItem(row, 10, new QTableWidgetItem(measItem.maximum_error)); - ui->tableWidget->setItem(row, 11, new QTableWidgetItem(measItem.error_param_a)); - ui->tableWidget->setItem(row, 12, new QTableWidgetItem(measItem.error_param_b)); - ui->tableWidget->setItem(row, 15, new QTableWidgetItem(measItem.indicating_value)); - ui->tableWidget->setItem(row, 19, new QTableWidgetItem(measItem.measure_indication_value)); - row++; - } + +void DialogCheckResult::initCheckTable(QMap> *measList,QMap *headList,QString sID) +{ + caliDataList = measList; + headTableList = headList; + stdId = sID; + ui->tableWidget->clearContents(); + ui->tableWidget->setRowCount(0); + deleteItem(ui->HeadListLayout); + int index=0; + for (const auto &item : *headTableList) { + // ======================================================================================== + // 数据循环显示 + // =================================================================================== + QString sLabel = headTableList->keys()[index]; + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(sLabel, this); + //设置样式 + // 设置按钮大小为 56x20 + button->setFixedSize(85, 40); + button->setCheckable(true); + button->setAutoExclusive(true); + //设置第一个按钮选中状态 + if(index==0){ button->setChecked(true);} + //button->setc(true); + // 设置按钮样式表 + button->setStyleSheet("QPushButton {" + "border: 1px solid white;" // 白色边框 + "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 + "background-color: rgba(242, 242, 242, 1);" // 浅灰色背景 + "}" + "QPushButton:hover {" + "background-color: rgba(215, 215, 215, 1);;" // 鼠标悬停时变为深灰色背景 + "}" + "QPushButton:checked {" + "color: white;" + "background-color: rgb(74, 102, 186);" // 选中时变为蓝色背景 + "}"); + + ui->HeadListLayout->addWidget(button); + connect(button, &QPushButton::clicked, this, [this,index]() { + //tackedWidget->setCurrentIndex(index); + initCalDataTable(index); + }); + ++index; + } + ui->HeadListLayout->addStretch(); + initCalDataTable(0); + + QList CliTable = BaseCommonApi::getJudgeCalibrationTable(deviceId); + if(CliTable.length()>0){ + iEquipType = CliTable[0].belong_standard_equipment.toInt(); + } + catoryList = BaseCommonApi::getDeviceMeasureEquipmentCatory(deviceId); +} + +QString DialogCheckResult::getValueByHeader(int idx,QString sLabel,QString sName){ + QList dataRes = caliDataList->value(sLabel); + const auto &headrs = headTableList->value(sLabel); + for(int i=0;ilineEditTemp->text(); measInfo.humidity =ui->lineEdit_Hum->text(); measInfo.measure_address=ui->comboBoxPlace->currentText(); @@ -81,12 +165,40 @@ equipment.create_time=equipment.update_time=QDateTime::currentDateTime(); BaseCommonApi::InsertDeviceMeasureEquipment(equipment); } - - for(SaveDeviceMeasureCalibrator& item:measureCalList){ - item.id = QString::number(api.generateId()); - item.data_id = measInfo.id; - BaseCommonApi::InsertVerMultiCal(item); + for (int k=0;kkeys().length();k++) { + QString sLabel = headTableList->keys()[k]; + const auto &dataRes = caliDataList->value(sLabel); + //tableWidget->setRowCount(data.count()); + if(iEquipType==1){ + for (int i = 0; i < dataRes.count(); ++i) { + SaveDeviceMeasureCalibrator measItem; + measItem.id = QString::number(api.generateId()); + measItem.data_id = measInfo.id; + measItem.item_data_id = getValueByHeader(i,sLabel,"序号"); + measItem.maximum_error_formula = getValueByHeader(i,sLabel,"最大允许误差");//最大允许误差(公式) + //measItem.error_param_a = item[11];//误差参数a + //measItem.error_param_b = item[12];//误差参数b + measItem.params = getValueByHeader(i,sLabel,"检定项目");//参数 + measItem.capacity=getValueByHeader(i,sLabel,"量");//量 + measItem.unit=getValueByHeader(i,sLabel,"单位");//单位 + //measItem.frequency=item[5];//频率 + //measItem.frequency_unit=item[6];//频率单位 + measItem.range_range=getValueByHeader(i,sLabel,"量程");//量程 + measItem.standard_value=getValueByHeader(i,sLabel,"标准值");//标准值(输入字段,特殊:指针式万用表输出字段) + measItem.indicating_value=getValueByHeader(i,sLabel,"示值");//示值(输出字段,特殊:指针式万用表输入字段) + measItem.maximum_error=getValueByHeader(i,sLabel,"最大允许误差");//最大允许误差(值) + measItem.absolute_error=getValueByHeader(i,sLabel,"绝对误差");//绝对误差 + measItem.resolution=getValueByHeader(i,sLabel,"分辨力");//分辨力 + measItem.measure_indication_value=getValueByHeader(i,sLabel,"示值");//被检表示值 + BaseCommonApi::InsertVerMultiCal(measItem); + } + } } +// for(SaveDeviceMeasureCalibrator& item:measureCalList){ +// item.id = QString::number(api.generateId()); +// item.data_id = measInfo.id; +// BaseCommonApi::InsertVerMultiCal(item); +// } QMessageBox::information(this, "提示", "保存成功!"); } else @@ -105,38 +217,72 @@ QStringList conentList; itemList <<"unit"<<"address"<<"jianAddr"<<"time2"<<"temperature"<<"humidity"; conentList <<""<<""<comboBoxPlace->currentText()<dateEditCheck->text()<lineEditTemp->text()<lineEdit_Hum->text(); - engine.setMarks("unit",""); + engine.setMarks("unit",taskList[0].customer_name); engine.setMarks("address",""); + engine.setMarks("name",taskList[0].sample_name); + engine.setMarks("type",taskList[0].sample_model); + engine.setMarks("serial",taskList[0].manufacture_no); + engine.setMarks("factory",taskList[0].manufacturer); engine.setMarks("jianAddr",ui->comboBoxPlace->currentText()); engine.setMarks("time2",ui->dateEditCheck->text()); engine.setMarks("temperature",ui->lineEditTemp->text()); engine.setMarks("humidity",ui->lineEdit_Hum->text()); + QList result = BaseCommonApi::getCatDeviceInfor(stdId); + if(result.length()>0){ + engine.setMarks("stdname",result[0].equipment_name); + engine.setMarks("stdtype",result[0].model); + engine.setMarks("stdno",result[0].manufacture_no); + engine.setMarks("stduncert",""); + engine.setMarks("stdvalid",result[0].measure_valid_date); + } + //engine.setBatchMarks(itemList,conentLis;t) QString strLabel = "result"; //engine.setMarks(strLabel,"1.表格1"); - QString strTitle = "1.表格1"; - int rows = measureCalList.length()+1; - int cols = measHeadList.length(); - QAxObject* pTable = engine.insertTable(strLabel,rows,cols,strTitle); - for (int i=0;ikeys().length()-1;k>=0;k--) { + QString sLabel = headTableList->keys()[k]; + QString strTitle = QString("%1.%2").arg(k+2).arg(sLabel); + const auto &headrs = headTableList->value(sLabel); + const auto &dataRes = caliDataList->value(sLabel); + int rows = dataRes.count()+1; + int cols = headrs.length(); + QAxObject* pTable = engine.insertTable(strLabel,rows,cols,strTitle); + for (int i=0;isetRowCount(data.count()); + for (int i = 0; i < dataRes.count(); ++i) { + engine.setCellString(pTable,i+2,1,QString::number(i+1)); + for(int j=1;jcomboBoxName->addItem("ALL"); ui->comboBoxModal->addItem("ALL"); ui->comboBoxCustomer->addItem("ALL"); + + //统一定义单位转换系数 + unitTransList.insert("V",1); + unitTransList.insert("MV",1000); + unitTransList.insert("A",1); + unitTransList.insert("MA",1000); + unitTransList.insert("UA",1000000); + unitTransList.insert("W",1); + unitTransList.insert("KW",0.001); + unitTransList.insert("Ω",1); + unitTransList.insert("KΩ",0.001); + unitTransList.insert("KΩ",0.000001); getCheckDevice(); //ui->stackedWidget_2->setCurrentIndex(1); //ui->tableWidgetDevice->verticalHeader()->sectionResizeMode(QHeaderView::Stretch); @@ -153,6 +165,7 @@ void CheckWindow::initDeviceInfo(QString sId) { + standardId = sId; QString strStyle = QString("QLabel{image:url(%1);}").arg(programInfo.img_path); qDebug() << "strStyle:" << strStyle; ui->label_8->setStyleSheet(strStyle); @@ -184,7 +197,7 @@ if(addrList.length()>0){ info.programInterface = addrList[0]; } - info.cmdList = BaseCommonApi::getInstructionLib(info.id); + info.cmdList = BaseCommonApi::getInstructionLib(programInfo.id); connectList.append(info); addrList.clear(); } @@ -266,6 +279,10 @@ { //QStringList idList=programInfo.tested_device_id.split(","); QString deviceId = selectTaskList[0].sample_id; + QList CliTable = BaseCommonApi::getJudgeCalibrationTable(deviceId); + if(CliTable.length()>0){ + iEquipType = CliTable[0].belong_standard_equipment.toInt(); + } //QStringList headlist; headList.clear(); calibrationList.clear(); @@ -276,6 +293,7 @@ //tableWidgetItem ui->tableWidget_Point->clearContents(); ui->tableWidget_Point->setRowCount(0); + deleteItem(ui->HeadListLayout); //循环数据 int rowCount=0; int row=0; @@ -296,7 +314,8 @@ // ======================================================================================== // 数据循环显示 // =================================================================================== - const auto &dataRes = caliDataList.value(headTableList.keys()[index]); + QString sLabel = headTableList.keys()[index]; + const auto &dataRes = caliDataList.value(sLabel); //tableWidget->setRowCount(data.count()); for (int i = 0; i < dataRes.count(); ++i) { @@ -309,11 +328,43 @@ ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1")); row++; } + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(sLabel, this); + //设置样式 + // 设置按钮大小为 56x20 + button->setFixedSize(85, 40); + button->setCheckable(true); + button->setAutoExclusive(true); + //设置第一个按钮选中状态 + if(index==0){ button->setChecked(true);} + //button->setc(true); + // 设置按钮样式表 + button->setStyleSheet("QPushButton {" + "border: 1px solid white;" // 白色边框 + "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 + "background-color: rgba(242, 242, 242, 1);" // 浅灰色背景 + "}" + "QPushButton:hover {" + "background-color: rgba(215, 215, 215, 1);;" // 鼠标悬停时变为深灰色背景 + "}" + "QPushButton:checked {" + "color: white;" + "background-color: rgb(74, 102, 186);" // 选中时变为蓝色背景 + "}"); + + ui->HeadListLayout->addWidget(button); + connect(button, &QPushButton::clicked, this, [this,index]() { + //tackedWidget->setCurrentIndex(index); + initCheckTable(index); + }); ++index; } + ui->HeadListLayout->addStretch(); } - ui->stackedWidget_2->setCurrentIndex(1); + initCheckTable(0); } void CheckWindow::on_deviceButton_clicked(Dept task,int idx) @@ -371,8 +422,8 @@ { DialogCheckResult* dlg = new DialogCheckResult; dlg->taskList =selectTaskList; - dlg->deviceId = programInfo.tested_device_id; - dlg->initCheckTable(measureCalList,headList,programInfo.standard_device_id); + dlg->deviceId = selectTaskList[0].sample_id; + dlg->initCheckTable(&caliDataList,&headTableList,standardId); dlg->setModal(true); dlg->show(); } @@ -592,56 +643,86 @@ } } -void CheckWindow::initCheckTable() +void CheckWindow::initCheckTable(int idx) { +// ui->tableWidgetCheck->clearContents(); +// ui->tableWidgetCheck->setRowCount(0); +// ui->tableWidgetCheck->setColumnCount(0); +// int rowCount = 0; +// int row=0; +// ui->tableWidgetCheck->setColumnCount(headList.count()); +// ui->tableWidgetCheck->setHorizontalHeaderLabels(headList); +// for(int i=0;itableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); +// } +// measureCalList.clear(); +// for(int i=0;itableWidget_Point->rowCount();i++){ +// Qt::CheckState state = ui->tableWidget_Point->item(i,0)->checkState(); +// if(state == Qt::Checked){ +// QStringList& item = calibrationList[i]; +// int cnt = ui->tableWidget_Point->item(i,2)->text().toInt(); +// for(int j=0;jtableWidgetCheck->rowCount(); +// ui->tableWidgetCheck->insertRow(rowCount); +// ui->tableWidgetCheck->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); +// //循环读取值 headlist,count是列的数量 +// for(int k=1;ktableWidgetCheck->setItem(row, k, new QTableWidgetItem(item[k])); +// } +// SaveDeviceMeasureCalibrator measItem; +// measItem.item_data_id = item[1]; +// measItem.maximum_error_formula = item[10];//最大允许误差(公式) +// measItem.error_param_a = item[11];//误差参数a +// measItem.error_param_b = item[12];//误差参数b +// measItem.params = item[2];//参数 +// measItem.capacity=item[3];//量 +// measItem.unit=item[4];//单位 +// measItem.frequency=item[5];//频率 +// measItem.frequency_unit=item[6];//频率单位 +// measItem.range_range=item[7];//量程 +// measItem.standard_value=item[8];//标准值(输入字段,特殊:指针式万用表输出字段) +// measItem.indicating_value=item[15];//示值(输出字段,特殊:指针式万用表输入字段) +// measItem.maximum_error=item[10];//最大允许误差(值) +// //measItem.absolute_error=item[11];//绝对误差 +// measItem.resolution=item[9];//分辨力 +// measItem.measure_indication_value=item[19];//被检表示值 +// measureCalList.append(measItem); +// row++; +// } +// } +// } + if(curHeadIdx==idx) + return; + curHeadIdx = idx; + QString sLabel = headTableList.keys()[curHeadIdx]; + const auto &dataRes = caliDataList.value(sLabel); + const auto &headrs = headTableList.value(sLabel); ui->tableWidgetCheck->clearContents(); ui->tableWidgetCheck->setRowCount(0); ui->tableWidgetCheck->setColumnCount(0); - int rowCount = 0; - int row=0; - ui->tableWidgetCheck->setColumnCount(headList.count()); - ui->tableWidgetCheck->setHorizontalHeaderLabels(headList); - for(int i=0;itableWidgetCheck->setColumnCount(headrs.count()); + ui->tableWidgetCheck->setHorizontalHeaderLabels(headrs); + for(int i=0;itableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); } - measureCalList.clear(); - for(int i=0;itableWidget_Point->rowCount();i++){ - Qt::CheckState state = ui->tableWidget_Point->item(i,0)->checkState(); - if(state == Qt::Checked){ - QStringList& item = calibrationList[i]; - int cnt = ui->tableWidget_Point->item(i,2)->text().toInt(); - for(int j=0;jtableWidgetCheck->rowCount(); - ui->tableWidgetCheck->insertRow(rowCount); - ui->tableWidgetCheck->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int k=1;ktableWidgetCheck->setItem(row, k, new QTableWidgetItem(item[k])); - } - SaveDeviceMeasureCalibrator measItem; - measItem.item_data_id = item[1]; - measItem.maximum_error_formula = item[10];//最大允许误差(公式) - measItem.error_param_a = item[11];//误差参数a - measItem.error_param_b = item[12];//误差参数b - measItem.params = item[2];//参数 - measItem.capacity=item[3];//量 - measItem.unit=item[4];//单位 - measItem.frequency=item[5];//频率 - measItem.frequency_unit=item[6];//频率单位 - measItem.range_range=item[7];//量程 - measItem.standard_value=item[8];//标准值(输入字段,特殊:指针式万用表输出字段) - measItem.indicating_value=item[15];//示值(输出字段,特殊:指针式万用表输入字段) - measItem.maximum_error=item[10];//最大允许误差(值) - //measItem.absolute_error=item[11];//绝对误差 - measItem.resolution=item[9];//分辨力 - measItem.measure_indication_value=item[19];//被检表示值 - measureCalList.append(measItem); - row++; - } + //tableWidget->setRowCount(data.count()); + int rowCount = 0; + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = ui->tableWidgetCheck->rowCount(); + ui->tableWidgetCheck->insertRow(rowCount); + ui->tableWidgetCheck->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jtableWidgetCheck->setItem(i, j, new QTableWidgetItem(dataRes[i][j])); } } +} + +void CheckWindow::connectDevice(){ if(connectList.length()>0&&connectList[0].type==0) deviceEngine.openDevice(connectList[0].programInterface.visa,"Visa"); if(connectList.length()>1&&connectList[1].type==1) @@ -659,52 +740,140 @@ return nullptr; } +int CheckWindow::getIndexByHeader(QString sLabel,QString sName){ + const auto &headrs = headTableList.value(sLabel); + for(int i=0;iinstruct_config.split(";"); - if(sList.length()>0){ - for (QString& sCmd : sList){ - standardEngine.sendData(sCmd); - } - } - } - } - //被检设备读数 - if(deviceEngine.getState()){ - InstructionLib *instrcutLib = getCmdByCheckName(0,item.params); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); - if(sList.length()>0){ - for (QString& sCmd : sList){ - deviceEngine.sendData(sCmd); - } - } - Delay_MSec(2000); - sRet = deviceEngine.queryData(instrcutLib->instruct_read); - } - } - // - if(sRet==""){ - bool bOk = false; - double dRet = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + initCheckTable(i); + QString sLabel = headTableList.keys()[i]; + QList dataRes = caliDataList.value(sLabel); - if (bOk) { - sRet = QString::number(dRet); + for (int i = 0; i < dataRes.count(); ++i) { + QString sRet=""; + double dStdValue,dError; + //标准器输出 + int idx= getIndexByHeader(sLabel,"检定项目"); + QString sParam = dataRes[i][idx]; + if(standardEngine.getState()){ + InstructionLib *instrcutLib = getCmdByCheckName(1,sParam); + if(instrcutLib!=nullptr){ + QStringList sList = instrcutLib->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + standardEngine.sendData(sCmd); + qDebug() << "standard cmds:" << sCmd; + } + } + } } + //被检设备读数 + if(deviceEngine.getState()){ + InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); + if(instrcutLib!=nullptr){ + QStringList sList = instrcutLib->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + deviceEngine.sendData(sCmd); + qDebug() << "config cmds:" << sCmd; + } + } + Delay_MSec(2000); + qDebug() << "query cmds:" << instrcutLib->instruct_read; + sRet = deviceEngine.queryData(instrcutLib->instruct_read); + idx= getIndexByHeader(sLabel,"单位"); + dStdValue = transUnit(sRet,dataRes[i][idx]); + } + } + // + if(sRet==""){ + bool bOk = false; + dStdValue = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + + if (bOk) { + sRet = QString::number(dStdValue); + //idx= getIndexByHeader(sLabel,"单位"); + //dStdValue = transUnit(sRet,dataRes[i][idx]); + //sRet = QString::number(dStdValue); + } + } + //item.measure_indication_value = sRet; + if(iEquipType==1){ + idx= getIndexByHeader(sLabel,"示值"); + dataRes[i][idx] = QString::number(dStdValue); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dStdValue))); //示值 + idx= getIndexByHeader(sLabel,"标准值"); + double dTmp = dataRes[i][idx].toDouble(); + dError = dStdValue-dTmp; + idx= getIndexByHeader(sLabel,"绝对误差"); + dataRes[i][idx] = QString::number(dError); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dError))); //示值 + } + //ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); } - item.measure_indication_value = sRet; - ui->tableWidgetCheck->setItem(i,15,new QTableWidgetItem(sRet)); //示值 - ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); + caliDataList.insert(sLabel,dataRes); } +// initCheckTable(); +// for(int i=0;iinstruct_config.split(";"); +// if(sList.length()>0){ +// for (QString& sCmd : sList){ +// standardEngine.sendData(sCmd); +// } +// } +// } +// } +// //被检设备读数 +// if(deviceEngine.getState()){ +// InstructionLib *instrcutLib = getCmdByCheckName(0,item.params); +// if(instrcutLib!=nullptr){ +// QStringList sList = instrcutLib->instruct_config.split(";"); +// if(sList.length()>0){ +// for (QString& sCmd : sList){ +// deviceEngine.sendData(sCmd); +// } +// } +// Delay_MSec(2000); +// sRet = deviceEngine.queryData(instrcutLib->instruct_read); +// } +// } +// // +// if(sRet==""){ +// bool bOk = false; +// double dRet = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + +// if (bOk) { +// sRet = QString::number(dRet); +// } +// } +// item.measure_indication_value = sRet; +// ui->tableWidgetCheck->setItem(i,15,new QTableWidgetItem(sRet)); //示值 +// ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); +// } } void CheckWindow::Delay_MSec(unsigned int msec) diff --git a/softwareDirectory/AutoVerScheme/checkwindow.h b/softwareDirectory/AutoVerScheme/checkwindow.h index 2655417..99a9d96 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.h +++ b/softwareDirectory/AutoVerScheme/checkwindow.h @@ -68,12 +68,15 @@ void getCheckMethod(); void initDeviceInfo(QString sId); void deleteItem(QLayout *layout); - void initCheckTable(); + void initCheckTable(int idx); InstructionLib* getCmdByCheckName(int idx,QString name); void Delay_MSec(unsigned int msec); void SetHomePaheCombox(Dept task); bool comboBoxContainsItem(QComboBox *comboBox, const QString &itemText); void showStandard(); + void connectDevice(); + int getIndexByHeader(QString sLabel,QString sName); + double transUnit(QString sData,QString sUnit); private: Ui::CheckWindow *ui; QList programList; @@ -90,6 +93,10 @@ QMap> caliDataList; QMap headTableList; QList catDeviceList; + int curHeadIdx=-1; + int iEquipType=1; + QMap unitTransList; + QString standardId; }; #endif // CHECKWINDOW_H diff --git a/softwareDirectory/AutoVerScheme/checkwindow.ui b/softwareDirectory/AutoVerScheme/checkwindow.ui index e27b34e..e81b305 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.ui +++ b/softwareDirectory/AutoVerScheme/checkwindow.ui @@ -1921,6 +1921,9 @@ + + + diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp index b4a2d42..cd2427a 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp @@ -8,7 +8,7 @@ ui(new Ui::DialogCheckResult) { ui->setupUi(this); - + ui->tableWidget->verticalHeader()->setParent(nullptr); } DialogCheckResult::~DialogCheckResult() @@ -16,43 +16,122 @@ delete ui; } -void DialogCheckResult::initCheckTable(QList measList,QStringList headList,QString sID) +void DialogCheckResult::deleteItem(QLayout *layout) { - ui->tableWidget->verticalHeader()->setParent(nullptr); - ui->tableWidget->setColumnCount(headList.count()); - ui->tableWidget->setHorizontalHeaderLabels(headList); - for(int i=0;itableWidget->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); - } - int rowCount=0; - int row=0; - measureCalList = measList; - measHeadList = headList; - stdId = sID; - for (const SaveDeviceMeasureCalibrator& measItem : measList) - { - //获取行号 并进行添加行 - rowCount = ui->tableWidget->rowCount(); - ui->tableWidget->insertRow(rowCount); - //添加 序号 - ui->tableWidget->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); + QLayoutItem *child; + while ((child = layout->takeAt(0)) != nullptr) + { + //setParent为NULL,防止删除之后界面不消失 + if(child->widget()) + { + child->widget()->setParent(nullptr); + delete child->widget(); + } + else if (child->layout()) + { + deleteItem(child->layout()); + child->layout()->deleteLater(); + } + delete child; + } +} +void DialogCheckResult::initCalDataTable(int idx) +{ + if(curHeadIdx==idx) + return; + curHeadIdx = idx; + QString sLabel = headTableList->keys()[curHeadIdx]; + const auto &dataRes = caliDataList->value(sLabel); + const auto &headrs = headTableList->value(sLabel); + ui->tableWidget->clearContents(); + ui->tableWidget->setRowCount(0); + ui->tableWidget->setColumnCount(0); + ui->tableWidget->setColumnCount(headrs.count()); + ui->tableWidget->setHorizontalHeaderLabels(headrs); + for(int i=0;itableWidget->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); + } + //tableWidget->setRowCount(data.count()); + int rowCount = 0; + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = ui->tableWidget->rowCount(); + ui->tableWidget->insertRow(rowCount); + ui->tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jtableWidget->setItem(i, j, new QTableWidgetItem(dataRes[i][j])); + } + } +} - ui->tableWidget->setItem(row, 2, new QTableWidgetItem(measItem.params)); - ui->tableWidget->setItem(row, 3, new QTableWidgetItem(measItem.capacity)); - ui->tableWidget->setItem(row, 4, new QTableWidgetItem(measItem.unit)); - ui->tableWidget->setItem(row, 5, new QTableWidgetItem(measItem.frequency)); - ui->tableWidget->setItem(row, 6, new QTableWidgetItem(measItem.frequency_unit)); - ui->tableWidget->setItem(row, 7, new QTableWidgetItem(measItem.range_range)); - ui->tableWidget->setItem(row, 8, new QTableWidgetItem(measItem.standard_value)); - ui->tableWidget->setItem(row, 9, new QTableWidgetItem(measItem.resolution)); - ui->tableWidget->setItem(row, 10, new QTableWidgetItem(measItem.maximum_error)); - ui->tableWidget->setItem(row, 11, new QTableWidgetItem(measItem.error_param_a)); - ui->tableWidget->setItem(row, 12, new QTableWidgetItem(measItem.error_param_b)); - ui->tableWidget->setItem(row, 15, new QTableWidgetItem(measItem.indicating_value)); - ui->tableWidget->setItem(row, 19, new QTableWidgetItem(measItem.measure_indication_value)); - row++; - } + +void DialogCheckResult::initCheckTable(QMap> *measList,QMap *headList,QString sID) +{ + caliDataList = measList; + headTableList = headList; + stdId = sID; + ui->tableWidget->clearContents(); + ui->tableWidget->setRowCount(0); + deleteItem(ui->HeadListLayout); + int index=0; + for (const auto &item : *headTableList) { + // ======================================================================================== + // 数据循环显示 + // =================================================================================== + QString sLabel = headTableList->keys()[index]; + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(sLabel, this); + //设置样式 + // 设置按钮大小为 56x20 + button->setFixedSize(85, 40); + button->setCheckable(true); + button->setAutoExclusive(true); + //设置第一个按钮选中状态 + if(index==0){ button->setChecked(true);} + //button->setc(true); + // 设置按钮样式表 + button->setStyleSheet("QPushButton {" + "border: 1px solid white;" // 白色边框 + "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 + "background-color: rgba(242, 242, 242, 1);" // 浅灰色背景 + "}" + "QPushButton:hover {" + "background-color: rgba(215, 215, 215, 1);;" // 鼠标悬停时变为深灰色背景 + "}" + "QPushButton:checked {" + "color: white;" + "background-color: rgb(74, 102, 186);" // 选中时变为蓝色背景 + "}"); + + ui->HeadListLayout->addWidget(button); + connect(button, &QPushButton::clicked, this, [this,index]() { + //tackedWidget->setCurrentIndex(index); + initCalDataTable(index); + }); + ++index; + } + ui->HeadListLayout->addStretch(); + initCalDataTable(0); + + QList CliTable = BaseCommonApi::getJudgeCalibrationTable(deviceId); + if(CliTable.length()>0){ + iEquipType = CliTable[0].belong_standard_equipment.toInt(); + } + catoryList = BaseCommonApi::getDeviceMeasureEquipmentCatory(deviceId); +} + +QString DialogCheckResult::getValueByHeader(int idx,QString sLabel,QString sName){ + QList dataRes = caliDataList->value(sLabel); + const auto &headrs = headTableList->value(sLabel); + for(int i=0;ilineEditTemp->text(); measInfo.humidity =ui->lineEdit_Hum->text(); measInfo.measure_address=ui->comboBoxPlace->currentText(); @@ -81,12 +165,40 @@ equipment.create_time=equipment.update_time=QDateTime::currentDateTime(); BaseCommonApi::InsertDeviceMeasureEquipment(equipment); } - - for(SaveDeviceMeasureCalibrator& item:measureCalList){ - item.id = QString::number(api.generateId()); - item.data_id = measInfo.id; - BaseCommonApi::InsertVerMultiCal(item); + for (int k=0;kkeys().length();k++) { + QString sLabel = headTableList->keys()[k]; + const auto &dataRes = caliDataList->value(sLabel); + //tableWidget->setRowCount(data.count()); + if(iEquipType==1){ + for (int i = 0; i < dataRes.count(); ++i) { + SaveDeviceMeasureCalibrator measItem; + measItem.id = QString::number(api.generateId()); + measItem.data_id = measInfo.id; + measItem.item_data_id = getValueByHeader(i,sLabel,"序号"); + measItem.maximum_error_formula = getValueByHeader(i,sLabel,"最大允许误差");//最大允许误差(公式) + //measItem.error_param_a = item[11];//误差参数a + //measItem.error_param_b = item[12];//误差参数b + measItem.params = getValueByHeader(i,sLabel,"检定项目");//参数 + measItem.capacity=getValueByHeader(i,sLabel,"量");//量 + measItem.unit=getValueByHeader(i,sLabel,"单位");//单位 + //measItem.frequency=item[5];//频率 + //measItem.frequency_unit=item[6];//频率单位 + measItem.range_range=getValueByHeader(i,sLabel,"量程");//量程 + measItem.standard_value=getValueByHeader(i,sLabel,"标准值");//标准值(输入字段,特殊:指针式万用表输出字段) + measItem.indicating_value=getValueByHeader(i,sLabel,"示值");//示值(输出字段,特殊:指针式万用表输入字段) + measItem.maximum_error=getValueByHeader(i,sLabel,"最大允许误差");//最大允许误差(值) + measItem.absolute_error=getValueByHeader(i,sLabel,"绝对误差");//绝对误差 + measItem.resolution=getValueByHeader(i,sLabel,"分辨力");//分辨力 + measItem.measure_indication_value=getValueByHeader(i,sLabel,"示值");//被检表示值 + BaseCommonApi::InsertVerMultiCal(measItem); + } + } } +// for(SaveDeviceMeasureCalibrator& item:measureCalList){ +// item.id = QString::number(api.generateId()); +// item.data_id = measInfo.id; +// BaseCommonApi::InsertVerMultiCal(item); +// } QMessageBox::information(this, "提示", "保存成功!"); } else @@ -105,38 +217,72 @@ QStringList conentList; itemList <<"unit"<<"address"<<"jianAddr"<<"time2"<<"temperature"<<"humidity"; conentList <<""<<""<comboBoxPlace->currentText()<dateEditCheck->text()<lineEditTemp->text()<lineEdit_Hum->text(); - engine.setMarks("unit",""); + engine.setMarks("unit",taskList[0].customer_name); engine.setMarks("address",""); + engine.setMarks("name",taskList[0].sample_name); + engine.setMarks("type",taskList[0].sample_model); + engine.setMarks("serial",taskList[0].manufacture_no); + engine.setMarks("factory",taskList[0].manufacturer); engine.setMarks("jianAddr",ui->comboBoxPlace->currentText()); engine.setMarks("time2",ui->dateEditCheck->text()); engine.setMarks("temperature",ui->lineEditTemp->text()); engine.setMarks("humidity",ui->lineEdit_Hum->text()); + QList result = BaseCommonApi::getCatDeviceInfor(stdId); + if(result.length()>0){ + engine.setMarks("stdname",result[0].equipment_name); + engine.setMarks("stdtype",result[0].model); + engine.setMarks("stdno",result[0].manufacture_no); + engine.setMarks("stduncert",""); + engine.setMarks("stdvalid",result[0].measure_valid_date); + } + //engine.setBatchMarks(itemList,conentLis;t) QString strLabel = "result"; //engine.setMarks(strLabel,"1.表格1"); - QString strTitle = "1.表格1"; - int rows = measureCalList.length()+1; - int cols = measHeadList.length(); - QAxObject* pTable = engine.insertTable(strLabel,rows,cols,strTitle); - for (int i=0;ikeys().length()-1;k>=0;k--) { + QString sLabel = headTableList->keys()[k]; + QString strTitle = QString("%1.%2").arg(k+2).arg(sLabel); + const auto &headrs = headTableList->value(sLabel); + const auto &dataRes = caliDataList->value(sLabel); + int rows = dataRes.count()+1; + int cols = headrs.length(); + QAxObject* pTable = engine.insertTable(strLabel,rows,cols,strTitle); + for (int i=0;isetRowCount(data.count()); + for (int i = 0; i < dataRes.count(); ++i) { + engine.setCellString(pTable,i+2,1,QString::number(i+1)); + for(int j=1;j measList,QStringList headList,QString sID); + void initCheckTable(QMap> *measList,QMap *headList,QString sID); private slots: void on_pushButton_3_clicked(); @@ -24,6 +24,10 @@ void on_pushButton_2_clicked(); void on_pushButton_clicked(); +private: + void deleteItem(QLayout *layout); + void initCalDataTable(int idx); + QString getValueByHeader(int idx,QString sLabel,QString sName); public: QList taskList; @@ -32,7 +36,12 @@ Ui::DialogCheckResult *ui; QList measureCalList; QStringList measHeadList; + QMap> *caliDataList; + QMap *headTableList; QString stdId; + int curHeadIdx=-1; + int iEquipType; + QList catoryList; }; #endif // DIALOGCHECKRESULT_H diff --git a/softwareDirectory/AutoVerScheme/checkwindow.cpp b/softwareDirectory/AutoVerScheme/checkwindow.cpp index 8e5d8ea..b528b5e 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.cpp +++ b/softwareDirectory/AutoVerScheme/checkwindow.cpp @@ -41,6 +41,18 @@ ui->comboBoxName->addItem("ALL"); ui->comboBoxModal->addItem("ALL"); ui->comboBoxCustomer->addItem("ALL"); + + //统一定义单位转换系数 + unitTransList.insert("V",1); + unitTransList.insert("MV",1000); + unitTransList.insert("A",1); + unitTransList.insert("MA",1000); + unitTransList.insert("UA",1000000); + unitTransList.insert("W",1); + unitTransList.insert("KW",0.001); + unitTransList.insert("Ω",1); + unitTransList.insert("KΩ",0.001); + unitTransList.insert("KΩ",0.000001); getCheckDevice(); //ui->stackedWidget_2->setCurrentIndex(1); //ui->tableWidgetDevice->verticalHeader()->sectionResizeMode(QHeaderView::Stretch); @@ -153,6 +165,7 @@ void CheckWindow::initDeviceInfo(QString sId) { + standardId = sId; QString strStyle = QString("QLabel{image:url(%1);}").arg(programInfo.img_path); qDebug() << "strStyle:" << strStyle; ui->label_8->setStyleSheet(strStyle); @@ -184,7 +197,7 @@ if(addrList.length()>0){ info.programInterface = addrList[0]; } - info.cmdList = BaseCommonApi::getInstructionLib(info.id); + info.cmdList = BaseCommonApi::getInstructionLib(programInfo.id); connectList.append(info); addrList.clear(); } @@ -266,6 +279,10 @@ { //QStringList idList=programInfo.tested_device_id.split(","); QString deviceId = selectTaskList[0].sample_id; + QList CliTable = BaseCommonApi::getJudgeCalibrationTable(deviceId); + if(CliTable.length()>0){ + iEquipType = CliTable[0].belong_standard_equipment.toInt(); + } //QStringList headlist; headList.clear(); calibrationList.clear(); @@ -276,6 +293,7 @@ //tableWidgetItem ui->tableWidget_Point->clearContents(); ui->tableWidget_Point->setRowCount(0); + deleteItem(ui->HeadListLayout); //循环数据 int rowCount=0; int row=0; @@ -296,7 +314,8 @@ // ======================================================================================== // 数据循环显示 // =================================================================================== - const auto &dataRes = caliDataList.value(headTableList.keys()[index]); + QString sLabel = headTableList.keys()[index]; + const auto &dataRes = caliDataList.value(sLabel); //tableWidget->setRowCount(data.count()); for (int i = 0; i < dataRes.count(); ++i) { @@ -309,11 +328,43 @@ ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1")); row++; } + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(sLabel, this); + //设置样式 + // 设置按钮大小为 56x20 + button->setFixedSize(85, 40); + button->setCheckable(true); + button->setAutoExclusive(true); + //设置第一个按钮选中状态 + if(index==0){ button->setChecked(true);} + //button->setc(true); + // 设置按钮样式表 + button->setStyleSheet("QPushButton {" + "border: 1px solid white;" // 白色边框 + "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 + "background-color: rgba(242, 242, 242, 1);" // 浅灰色背景 + "}" + "QPushButton:hover {" + "background-color: rgba(215, 215, 215, 1);;" // 鼠标悬停时变为深灰色背景 + "}" + "QPushButton:checked {" + "color: white;" + "background-color: rgb(74, 102, 186);" // 选中时变为蓝色背景 + "}"); + + ui->HeadListLayout->addWidget(button); + connect(button, &QPushButton::clicked, this, [this,index]() { + //tackedWidget->setCurrentIndex(index); + initCheckTable(index); + }); ++index; } + ui->HeadListLayout->addStretch(); } - ui->stackedWidget_2->setCurrentIndex(1); + initCheckTable(0); } void CheckWindow::on_deviceButton_clicked(Dept task,int idx) @@ -371,8 +422,8 @@ { DialogCheckResult* dlg = new DialogCheckResult; dlg->taskList =selectTaskList; - dlg->deviceId = programInfo.tested_device_id; - dlg->initCheckTable(measureCalList,headList,programInfo.standard_device_id); + dlg->deviceId = selectTaskList[0].sample_id; + dlg->initCheckTable(&caliDataList,&headTableList,standardId); dlg->setModal(true); dlg->show(); } @@ -592,56 +643,86 @@ } } -void CheckWindow::initCheckTable() +void CheckWindow::initCheckTable(int idx) { +// ui->tableWidgetCheck->clearContents(); +// ui->tableWidgetCheck->setRowCount(0); +// ui->tableWidgetCheck->setColumnCount(0); +// int rowCount = 0; +// int row=0; +// ui->tableWidgetCheck->setColumnCount(headList.count()); +// ui->tableWidgetCheck->setHorizontalHeaderLabels(headList); +// for(int i=0;itableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); +// } +// measureCalList.clear(); +// for(int i=0;itableWidget_Point->rowCount();i++){ +// Qt::CheckState state = ui->tableWidget_Point->item(i,0)->checkState(); +// if(state == Qt::Checked){ +// QStringList& item = calibrationList[i]; +// int cnt = ui->tableWidget_Point->item(i,2)->text().toInt(); +// for(int j=0;jtableWidgetCheck->rowCount(); +// ui->tableWidgetCheck->insertRow(rowCount); +// ui->tableWidgetCheck->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); +// //循环读取值 headlist,count是列的数量 +// for(int k=1;ktableWidgetCheck->setItem(row, k, new QTableWidgetItem(item[k])); +// } +// SaveDeviceMeasureCalibrator measItem; +// measItem.item_data_id = item[1]; +// measItem.maximum_error_formula = item[10];//最大允许误差(公式) +// measItem.error_param_a = item[11];//误差参数a +// measItem.error_param_b = item[12];//误差参数b +// measItem.params = item[2];//参数 +// measItem.capacity=item[3];//量 +// measItem.unit=item[4];//单位 +// measItem.frequency=item[5];//频率 +// measItem.frequency_unit=item[6];//频率单位 +// measItem.range_range=item[7];//量程 +// measItem.standard_value=item[8];//标准值(输入字段,特殊:指针式万用表输出字段) +// measItem.indicating_value=item[15];//示值(输出字段,特殊:指针式万用表输入字段) +// measItem.maximum_error=item[10];//最大允许误差(值) +// //measItem.absolute_error=item[11];//绝对误差 +// measItem.resolution=item[9];//分辨力 +// measItem.measure_indication_value=item[19];//被检表示值 +// measureCalList.append(measItem); +// row++; +// } +// } +// } + if(curHeadIdx==idx) + return; + curHeadIdx = idx; + QString sLabel = headTableList.keys()[curHeadIdx]; + const auto &dataRes = caliDataList.value(sLabel); + const auto &headrs = headTableList.value(sLabel); ui->tableWidgetCheck->clearContents(); ui->tableWidgetCheck->setRowCount(0); ui->tableWidgetCheck->setColumnCount(0); - int rowCount = 0; - int row=0; - ui->tableWidgetCheck->setColumnCount(headList.count()); - ui->tableWidgetCheck->setHorizontalHeaderLabels(headList); - for(int i=0;itableWidgetCheck->setColumnCount(headrs.count()); + ui->tableWidgetCheck->setHorizontalHeaderLabels(headrs); + for(int i=0;itableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); } - measureCalList.clear(); - for(int i=0;itableWidget_Point->rowCount();i++){ - Qt::CheckState state = ui->tableWidget_Point->item(i,0)->checkState(); - if(state == Qt::Checked){ - QStringList& item = calibrationList[i]; - int cnt = ui->tableWidget_Point->item(i,2)->text().toInt(); - for(int j=0;jtableWidgetCheck->rowCount(); - ui->tableWidgetCheck->insertRow(rowCount); - ui->tableWidgetCheck->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int k=1;ktableWidgetCheck->setItem(row, k, new QTableWidgetItem(item[k])); - } - SaveDeviceMeasureCalibrator measItem; - measItem.item_data_id = item[1]; - measItem.maximum_error_formula = item[10];//最大允许误差(公式) - measItem.error_param_a = item[11];//误差参数a - measItem.error_param_b = item[12];//误差参数b - measItem.params = item[2];//参数 - measItem.capacity=item[3];//量 - measItem.unit=item[4];//单位 - measItem.frequency=item[5];//频率 - measItem.frequency_unit=item[6];//频率单位 - measItem.range_range=item[7];//量程 - measItem.standard_value=item[8];//标准值(输入字段,特殊:指针式万用表输出字段) - measItem.indicating_value=item[15];//示值(输出字段,特殊:指针式万用表输入字段) - measItem.maximum_error=item[10];//最大允许误差(值) - //measItem.absolute_error=item[11];//绝对误差 - measItem.resolution=item[9];//分辨力 - measItem.measure_indication_value=item[19];//被检表示值 - measureCalList.append(measItem); - row++; - } + //tableWidget->setRowCount(data.count()); + int rowCount = 0; + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = ui->tableWidgetCheck->rowCount(); + ui->tableWidgetCheck->insertRow(rowCount); + ui->tableWidgetCheck->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jtableWidgetCheck->setItem(i, j, new QTableWidgetItem(dataRes[i][j])); } } +} + +void CheckWindow::connectDevice(){ if(connectList.length()>0&&connectList[0].type==0) deviceEngine.openDevice(connectList[0].programInterface.visa,"Visa"); if(connectList.length()>1&&connectList[1].type==1) @@ -659,52 +740,140 @@ return nullptr; } +int CheckWindow::getIndexByHeader(QString sLabel,QString sName){ + const auto &headrs = headTableList.value(sLabel); + for(int i=0;iinstruct_config.split(";"); - if(sList.length()>0){ - for (QString& sCmd : sList){ - standardEngine.sendData(sCmd); - } - } - } - } - //被检设备读数 - if(deviceEngine.getState()){ - InstructionLib *instrcutLib = getCmdByCheckName(0,item.params); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); - if(sList.length()>0){ - for (QString& sCmd : sList){ - deviceEngine.sendData(sCmd); - } - } - Delay_MSec(2000); - sRet = deviceEngine.queryData(instrcutLib->instruct_read); - } - } - // - if(sRet==""){ - bool bOk = false; - double dRet = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + initCheckTable(i); + QString sLabel = headTableList.keys()[i]; + QList dataRes = caliDataList.value(sLabel); - if (bOk) { - sRet = QString::number(dRet); + for (int i = 0; i < dataRes.count(); ++i) { + QString sRet=""; + double dStdValue,dError; + //标准器输出 + int idx= getIndexByHeader(sLabel,"检定项目"); + QString sParam = dataRes[i][idx]; + if(standardEngine.getState()){ + InstructionLib *instrcutLib = getCmdByCheckName(1,sParam); + if(instrcutLib!=nullptr){ + QStringList sList = instrcutLib->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + standardEngine.sendData(sCmd); + qDebug() << "standard cmds:" << sCmd; + } + } + } } + //被检设备读数 + if(deviceEngine.getState()){ + InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); + if(instrcutLib!=nullptr){ + QStringList sList = instrcutLib->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + deviceEngine.sendData(sCmd); + qDebug() << "config cmds:" << sCmd; + } + } + Delay_MSec(2000); + qDebug() << "query cmds:" << instrcutLib->instruct_read; + sRet = deviceEngine.queryData(instrcutLib->instruct_read); + idx= getIndexByHeader(sLabel,"单位"); + dStdValue = transUnit(sRet,dataRes[i][idx]); + } + } + // + if(sRet==""){ + bool bOk = false; + dStdValue = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + + if (bOk) { + sRet = QString::number(dStdValue); + //idx= getIndexByHeader(sLabel,"单位"); + //dStdValue = transUnit(sRet,dataRes[i][idx]); + //sRet = QString::number(dStdValue); + } + } + //item.measure_indication_value = sRet; + if(iEquipType==1){ + idx= getIndexByHeader(sLabel,"示值"); + dataRes[i][idx] = QString::number(dStdValue); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dStdValue))); //示值 + idx= getIndexByHeader(sLabel,"标准值"); + double dTmp = dataRes[i][idx].toDouble(); + dError = dStdValue-dTmp; + idx= getIndexByHeader(sLabel,"绝对误差"); + dataRes[i][idx] = QString::number(dError); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dError))); //示值 + } + //ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); } - item.measure_indication_value = sRet; - ui->tableWidgetCheck->setItem(i,15,new QTableWidgetItem(sRet)); //示值 - ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); + caliDataList.insert(sLabel,dataRes); } +// initCheckTable(); +// for(int i=0;iinstruct_config.split(";"); +// if(sList.length()>0){ +// for (QString& sCmd : sList){ +// standardEngine.sendData(sCmd); +// } +// } +// } +// } +// //被检设备读数 +// if(deviceEngine.getState()){ +// InstructionLib *instrcutLib = getCmdByCheckName(0,item.params); +// if(instrcutLib!=nullptr){ +// QStringList sList = instrcutLib->instruct_config.split(";"); +// if(sList.length()>0){ +// for (QString& sCmd : sList){ +// deviceEngine.sendData(sCmd); +// } +// } +// Delay_MSec(2000); +// sRet = deviceEngine.queryData(instrcutLib->instruct_read); +// } +// } +// // +// if(sRet==""){ +// bool bOk = false; +// double dRet = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + +// if (bOk) { +// sRet = QString::number(dRet); +// } +// } +// item.measure_indication_value = sRet; +// ui->tableWidgetCheck->setItem(i,15,new QTableWidgetItem(sRet)); //示值 +// ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); +// } } void CheckWindow::Delay_MSec(unsigned int msec) diff --git a/softwareDirectory/AutoVerScheme/checkwindow.h b/softwareDirectory/AutoVerScheme/checkwindow.h index 2655417..99a9d96 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.h +++ b/softwareDirectory/AutoVerScheme/checkwindow.h @@ -68,12 +68,15 @@ void getCheckMethod(); void initDeviceInfo(QString sId); void deleteItem(QLayout *layout); - void initCheckTable(); + void initCheckTable(int idx); InstructionLib* getCmdByCheckName(int idx,QString name); void Delay_MSec(unsigned int msec); void SetHomePaheCombox(Dept task); bool comboBoxContainsItem(QComboBox *comboBox, const QString &itemText); void showStandard(); + void connectDevice(); + int getIndexByHeader(QString sLabel,QString sName); + double transUnit(QString sData,QString sUnit); private: Ui::CheckWindow *ui; QList programList; @@ -90,6 +93,10 @@ QMap> caliDataList; QMap headTableList; QList catDeviceList; + int curHeadIdx=-1; + int iEquipType=1; + QMap unitTransList; + QString standardId; }; #endif // CHECKWINDOW_H diff --git a/softwareDirectory/AutoVerScheme/checkwindow.ui b/softwareDirectory/AutoVerScheme/checkwindow.ui index e27b34e..e81b305 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.ui +++ b/softwareDirectory/AutoVerScheme/checkwindow.ui @@ -1921,6 +1921,9 @@ + + + diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp index b4a2d42..cd2427a 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp @@ -8,7 +8,7 @@ ui(new Ui::DialogCheckResult) { ui->setupUi(this); - + ui->tableWidget->verticalHeader()->setParent(nullptr); } DialogCheckResult::~DialogCheckResult() @@ -16,43 +16,122 @@ delete ui; } -void DialogCheckResult::initCheckTable(QList measList,QStringList headList,QString sID) +void DialogCheckResult::deleteItem(QLayout *layout) { - ui->tableWidget->verticalHeader()->setParent(nullptr); - ui->tableWidget->setColumnCount(headList.count()); - ui->tableWidget->setHorizontalHeaderLabels(headList); - for(int i=0;itableWidget->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); - } - int rowCount=0; - int row=0; - measureCalList = measList; - measHeadList = headList; - stdId = sID; - for (const SaveDeviceMeasureCalibrator& measItem : measList) - { - //获取行号 并进行添加行 - rowCount = ui->tableWidget->rowCount(); - ui->tableWidget->insertRow(rowCount); - //添加 序号 - ui->tableWidget->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); + QLayoutItem *child; + while ((child = layout->takeAt(0)) != nullptr) + { + //setParent为NULL,防止删除之后界面不消失 + if(child->widget()) + { + child->widget()->setParent(nullptr); + delete child->widget(); + } + else if (child->layout()) + { + deleteItem(child->layout()); + child->layout()->deleteLater(); + } + delete child; + } +} +void DialogCheckResult::initCalDataTable(int idx) +{ + if(curHeadIdx==idx) + return; + curHeadIdx = idx; + QString sLabel = headTableList->keys()[curHeadIdx]; + const auto &dataRes = caliDataList->value(sLabel); + const auto &headrs = headTableList->value(sLabel); + ui->tableWidget->clearContents(); + ui->tableWidget->setRowCount(0); + ui->tableWidget->setColumnCount(0); + ui->tableWidget->setColumnCount(headrs.count()); + ui->tableWidget->setHorizontalHeaderLabels(headrs); + for(int i=0;itableWidget->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); + } + //tableWidget->setRowCount(data.count()); + int rowCount = 0; + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = ui->tableWidget->rowCount(); + ui->tableWidget->insertRow(rowCount); + ui->tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jtableWidget->setItem(i, j, new QTableWidgetItem(dataRes[i][j])); + } + } +} - ui->tableWidget->setItem(row, 2, new QTableWidgetItem(measItem.params)); - ui->tableWidget->setItem(row, 3, new QTableWidgetItem(measItem.capacity)); - ui->tableWidget->setItem(row, 4, new QTableWidgetItem(measItem.unit)); - ui->tableWidget->setItem(row, 5, new QTableWidgetItem(measItem.frequency)); - ui->tableWidget->setItem(row, 6, new QTableWidgetItem(measItem.frequency_unit)); - ui->tableWidget->setItem(row, 7, new QTableWidgetItem(measItem.range_range)); - ui->tableWidget->setItem(row, 8, new QTableWidgetItem(measItem.standard_value)); - ui->tableWidget->setItem(row, 9, new QTableWidgetItem(measItem.resolution)); - ui->tableWidget->setItem(row, 10, new QTableWidgetItem(measItem.maximum_error)); - ui->tableWidget->setItem(row, 11, new QTableWidgetItem(measItem.error_param_a)); - ui->tableWidget->setItem(row, 12, new QTableWidgetItem(measItem.error_param_b)); - ui->tableWidget->setItem(row, 15, new QTableWidgetItem(measItem.indicating_value)); - ui->tableWidget->setItem(row, 19, new QTableWidgetItem(measItem.measure_indication_value)); - row++; - } + +void DialogCheckResult::initCheckTable(QMap> *measList,QMap *headList,QString sID) +{ + caliDataList = measList; + headTableList = headList; + stdId = sID; + ui->tableWidget->clearContents(); + ui->tableWidget->setRowCount(0); + deleteItem(ui->HeadListLayout); + int index=0; + for (const auto &item : *headTableList) { + // ======================================================================================== + // 数据循环显示 + // =================================================================================== + QString sLabel = headTableList->keys()[index]; + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(sLabel, this); + //设置样式 + // 设置按钮大小为 56x20 + button->setFixedSize(85, 40); + button->setCheckable(true); + button->setAutoExclusive(true); + //设置第一个按钮选中状态 + if(index==0){ button->setChecked(true);} + //button->setc(true); + // 设置按钮样式表 + button->setStyleSheet("QPushButton {" + "border: 1px solid white;" // 白色边框 + "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 + "background-color: rgba(242, 242, 242, 1);" // 浅灰色背景 + "}" + "QPushButton:hover {" + "background-color: rgba(215, 215, 215, 1);;" // 鼠标悬停时变为深灰色背景 + "}" + "QPushButton:checked {" + "color: white;" + "background-color: rgb(74, 102, 186);" // 选中时变为蓝色背景 + "}"); + + ui->HeadListLayout->addWidget(button); + connect(button, &QPushButton::clicked, this, [this,index]() { + //tackedWidget->setCurrentIndex(index); + initCalDataTable(index); + }); + ++index; + } + ui->HeadListLayout->addStretch(); + initCalDataTable(0); + + QList CliTable = BaseCommonApi::getJudgeCalibrationTable(deviceId); + if(CliTable.length()>0){ + iEquipType = CliTable[0].belong_standard_equipment.toInt(); + } + catoryList = BaseCommonApi::getDeviceMeasureEquipmentCatory(deviceId); +} + +QString DialogCheckResult::getValueByHeader(int idx,QString sLabel,QString sName){ + QList dataRes = caliDataList->value(sLabel); + const auto &headrs = headTableList->value(sLabel); + for(int i=0;ilineEditTemp->text(); measInfo.humidity =ui->lineEdit_Hum->text(); measInfo.measure_address=ui->comboBoxPlace->currentText(); @@ -81,12 +165,40 @@ equipment.create_time=equipment.update_time=QDateTime::currentDateTime(); BaseCommonApi::InsertDeviceMeasureEquipment(equipment); } - - for(SaveDeviceMeasureCalibrator& item:measureCalList){ - item.id = QString::number(api.generateId()); - item.data_id = measInfo.id; - BaseCommonApi::InsertVerMultiCal(item); + for (int k=0;kkeys().length();k++) { + QString sLabel = headTableList->keys()[k]; + const auto &dataRes = caliDataList->value(sLabel); + //tableWidget->setRowCount(data.count()); + if(iEquipType==1){ + for (int i = 0; i < dataRes.count(); ++i) { + SaveDeviceMeasureCalibrator measItem; + measItem.id = QString::number(api.generateId()); + measItem.data_id = measInfo.id; + measItem.item_data_id = getValueByHeader(i,sLabel,"序号"); + measItem.maximum_error_formula = getValueByHeader(i,sLabel,"最大允许误差");//最大允许误差(公式) + //measItem.error_param_a = item[11];//误差参数a + //measItem.error_param_b = item[12];//误差参数b + measItem.params = getValueByHeader(i,sLabel,"检定项目");//参数 + measItem.capacity=getValueByHeader(i,sLabel,"量");//量 + measItem.unit=getValueByHeader(i,sLabel,"单位");//单位 + //measItem.frequency=item[5];//频率 + //measItem.frequency_unit=item[6];//频率单位 + measItem.range_range=getValueByHeader(i,sLabel,"量程");//量程 + measItem.standard_value=getValueByHeader(i,sLabel,"标准值");//标准值(输入字段,特殊:指针式万用表输出字段) + measItem.indicating_value=getValueByHeader(i,sLabel,"示值");//示值(输出字段,特殊:指针式万用表输入字段) + measItem.maximum_error=getValueByHeader(i,sLabel,"最大允许误差");//最大允许误差(值) + measItem.absolute_error=getValueByHeader(i,sLabel,"绝对误差");//绝对误差 + measItem.resolution=getValueByHeader(i,sLabel,"分辨力");//分辨力 + measItem.measure_indication_value=getValueByHeader(i,sLabel,"示值");//被检表示值 + BaseCommonApi::InsertVerMultiCal(measItem); + } + } } +// for(SaveDeviceMeasureCalibrator& item:measureCalList){ +// item.id = QString::number(api.generateId()); +// item.data_id = measInfo.id; +// BaseCommonApi::InsertVerMultiCal(item); +// } QMessageBox::information(this, "提示", "保存成功!"); } else @@ -105,38 +217,72 @@ QStringList conentList; itemList <<"unit"<<"address"<<"jianAddr"<<"time2"<<"temperature"<<"humidity"; conentList <<""<<""<comboBoxPlace->currentText()<dateEditCheck->text()<lineEditTemp->text()<lineEdit_Hum->text(); - engine.setMarks("unit",""); + engine.setMarks("unit",taskList[0].customer_name); engine.setMarks("address",""); + engine.setMarks("name",taskList[0].sample_name); + engine.setMarks("type",taskList[0].sample_model); + engine.setMarks("serial",taskList[0].manufacture_no); + engine.setMarks("factory",taskList[0].manufacturer); engine.setMarks("jianAddr",ui->comboBoxPlace->currentText()); engine.setMarks("time2",ui->dateEditCheck->text()); engine.setMarks("temperature",ui->lineEditTemp->text()); engine.setMarks("humidity",ui->lineEdit_Hum->text()); + QList result = BaseCommonApi::getCatDeviceInfor(stdId); + if(result.length()>0){ + engine.setMarks("stdname",result[0].equipment_name); + engine.setMarks("stdtype",result[0].model); + engine.setMarks("stdno",result[0].manufacture_no); + engine.setMarks("stduncert",""); + engine.setMarks("stdvalid",result[0].measure_valid_date); + } + //engine.setBatchMarks(itemList,conentLis;t) QString strLabel = "result"; //engine.setMarks(strLabel,"1.表格1"); - QString strTitle = "1.表格1"; - int rows = measureCalList.length()+1; - int cols = measHeadList.length(); - QAxObject* pTable = engine.insertTable(strLabel,rows,cols,strTitle); - for (int i=0;ikeys().length()-1;k>=0;k--) { + QString sLabel = headTableList->keys()[k]; + QString strTitle = QString("%1.%2").arg(k+2).arg(sLabel); + const auto &headrs = headTableList->value(sLabel); + const auto &dataRes = caliDataList->value(sLabel); + int rows = dataRes.count()+1; + int cols = headrs.length(); + QAxObject* pTable = engine.insertTable(strLabel,rows,cols,strTitle); + for (int i=0;isetRowCount(data.count()); + for (int i = 0; i < dataRes.count(); ++i) { + engine.setCellString(pTable,i+2,1,QString::number(i+1)); + for(int j=1;j measList,QStringList headList,QString sID); + void initCheckTable(QMap> *measList,QMap *headList,QString sID); private slots: void on_pushButton_3_clicked(); @@ -24,6 +24,10 @@ void on_pushButton_2_clicked(); void on_pushButton_clicked(); +private: + void deleteItem(QLayout *layout); + void initCalDataTable(int idx); + QString getValueByHeader(int idx,QString sLabel,QString sName); public: QList taskList; @@ -32,7 +36,12 @@ Ui::DialogCheckResult *ui; QList measureCalList; QStringList measHeadList; + QMap> *caliDataList; + QMap *headTableList; QString stdId; + int curHeadIdx=-1; + int iEquipType; + QList catoryList; }; #endif // DIALOGCHECKRESULT_H diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.ui b/softwareDirectory/AutoVerScheme/dialogcheckresult.ui index 3be74e6..c8d624f 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.ui +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.ui @@ -6,8 +6,8 @@ 0 0 - 959 - 723 + 1334 + 789 @@ -255,6 +255,9 @@ + + + false diff --git a/softwareDirectory/AutoVerScheme/checkwindow.cpp b/softwareDirectory/AutoVerScheme/checkwindow.cpp index 8e5d8ea..b528b5e 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.cpp +++ b/softwareDirectory/AutoVerScheme/checkwindow.cpp @@ -41,6 +41,18 @@ ui->comboBoxName->addItem("ALL"); ui->comboBoxModal->addItem("ALL"); ui->comboBoxCustomer->addItem("ALL"); + + //统一定义单位转换系数 + unitTransList.insert("V",1); + unitTransList.insert("MV",1000); + unitTransList.insert("A",1); + unitTransList.insert("MA",1000); + unitTransList.insert("UA",1000000); + unitTransList.insert("W",1); + unitTransList.insert("KW",0.001); + unitTransList.insert("Ω",1); + unitTransList.insert("KΩ",0.001); + unitTransList.insert("KΩ",0.000001); getCheckDevice(); //ui->stackedWidget_2->setCurrentIndex(1); //ui->tableWidgetDevice->verticalHeader()->sectionResizeMode(QHeaderView::Stretch); @@ -153,6 +165,7 @@ void CheckWindow::initDeviceInfo(QString sId) { + standardId = sId; QString strStyle = QString("QLabel{image:url(%1);}").arg(programInfo.img_path); qDebug() << "strStyle:" << strStyle; ui->label_8->setStyleSheet(strStyle); @@ -184,7 +197,7 @@ if(addrList.length()>0){ info.programInterface = addrList[0]; } - info.cmdList = BaseCommonApi::getInstructionLib(info.id); + info.cmdList = BaseCommonApi::getInstructionLib(programInfo.id); connectList.append(info); addrList.clear(); } @@ -266,6 +279,10 @@ { //QStringList idList=programInfo.tested_device_id.split(","); QString deviceId = selectTaskList[0].sample_id; + QList CliTable = BaseCommonApi::getJudgeCalibrationTable(deviceId); + if(CliTable.length()>0){ + iEquipType = CliTable[0].belong_standard_equipment.toInt(); + } //QStringList headlist; headList.clear(); calibrationList.clear(); @@ -276,6 +293,7 @@ //tableWidgetItem ui->tableWidget_Point->clearContents(); ui->tableWidget_Point->setRowCount(0); + deleteItem(ui->HeadListLayout); //循环数据 int rowCount=0; int row=0; @@ -296,7 +314,8 @@ // ======================================================================================== // 数据循环显示 // =================================================================================== - const auto &dataRes = caliDataList.value(headTableList.keys()[index]); + QString sLabel = headTableList.keys()[index]; + const auto &dataRes = caliDataList.value(sLabel); //tableWidget->setRowCount(data.count()); for (int i = 0; i < dataRes.count(); ++i) { @@ -309,11 +328,43 @@ ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1")); row++; } + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(sLabel, this); + //设置样式 + // 设置按钮大小为 56x20 + button->setFixedSize(85, 40); + button->setCheckable(true); + button->setAutoExclusive(true); + //设置第一个按钮选中状态 + if(index==0){ button->setChecked(true);} + //button->setc(true); + // 设置按钮样式表 + button->setStyleSheet("QPushButton {" + "border: 1px solid white;" // 白色边框 + "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 + "background-color: rgba(242, 242, 242, 1);" // 浅灰色背景 + "}" + "QPushButton:hover {" + "background-color: rgba(215, 215, 215, 1);;" // 鼠标悬停时变为深灰色背景 + "}" + "QPushButton:checked {" + "color: white;" + "background-color: rgb(74, 102, 186);" // 选中时变为蓝色背景 + "}"); + + ui->HeadListLayout->addWidget(button); + connect(button, &QPushButton::clicked, this, [this,index]() { + //tackedWidget->setCurrentIndex(index); + initCheckTable(index); + }); ++index; } + ui->HeadListLayout->addStretch(); } - ui->stackedWidget_2->setCurrentIndex(1); + initCheckTable(0); } void CheckWindow::on_deviceButton_clicked(Dept task,int idx) @@ -371,8 +422,8 @@ { DialogCheckResult* dlg = new DialogCheckResult; dlg->taskList =selectTaskList; - dlg->deviceId = programInfo.tested_device_id; - dlg->initCheckTable(measureCalList,headList,programInfo.standard_device_id); + dlg->deviceId = selectTaskList[0].sample_id; + dlg->initCheckTable(&caliDataList,&headTableList,standardId); dlg->setModal(true); dlg->show(); } @@ -592,56 +643,86 @@ } } -void CheckWindow::initCheckTable() +void CheckWindow::initCheckTable(int idx) { +// ui->tableWidgetCheck->clearContents(); +// ui->tableWidgetCheck->setRowCount(0); +// ui->tableWidgetCheck->setColumnCount(0); +// int rowCount = 0; +// int row=0; +// ui->tableWidgetCheck->setColumnCount(headList.count()); +// ui->tableWidgetCheck->setHorizontalHeaderLabels(headList); +// for(int i=0;itableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); +// } +// measureCalList.clear(); +// for(int i=0;itableWidget_Point->rowCount();i++){ +// Qt::CheckState state = ui->tableWidget_Point->item(i,0)->checkState(); +// if(state == Qt::Checked){ +// QStringList& item = calibrationList[i]; +// int cnt = ui->tableWidget_Point->item(i,2)->text().toInt(); +// for(int j=0;jtableWidgetCheck->rowCount(); +// ui->tableWidgetCheck->insertRow(rowCount); +// ui->tableWidgetCheck->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); +// //循环读取值 headlist,count是列的数量 +// for(int k=1;ktableWidgetCheck->setItem(row, k, new QTableWidgetItem(item[k])); +// } +// SaveDeviceMeasureCalibrator measItem; +// measItem.item_data_id = item[1]; +// measItem.maximum_error_formula = item[10];//最大允许误差(公式) +// measItem.error_param_a = item[11];//误差参数a +// measItem.error_param_b = item[12];//误差参数b +// measItem.params = item[2];//参数 +// measItem.capacity=item[3];//量 +// measItem.unit=item[4];//单位 +// measItem.frequency=item[5];//频率 +// measItem.frequency_unit=item[6];//频率单位 +// measItem.range_range=item[7];//量程 +// measItem.standard_value=item[8];//标准值(输入字段,特殊:指针式万用表输出字段) +// measItem.indicating_value=item[15];//示值(输出字段,特殊:指针式万用表输入字段) +// measItem.maximum_error=item[10];//最大允许误差(值) +// //measItem.absolute_error=item[11];//绝对误差 +// measItem.resolution=item[9];//分辨力 +// measItem.measure_indication_value=item[19];//被检表示值 +// measureCalList.append(measItem); +// row++; +// } +// } +// } + if(curHeadIdx==idx) + return; + curHeadIdx = idx; + QString sLabel = headTableList.keys()[curHeadIdx]; + const auto &dataRes = caliDataList.value(sLabel); + const auto &headrs = headTableList.value(sLabel); ui->tableWidgetCheck->clearContents(); ui->tableWidgetCheck->setRowCount(0); ui->tableWidgetCheck->setColumnCount(0); - int rowCount = 0; - int row=0; - ui->tableWidgetCheck->setColumnCount(headList.count()); - ui->tableWidgetCheck->setHorizontalHeaderLabels(headList); - for(int i=0;itableWidgetCheck->setColumnCount(headrs.count()); + ui->tableWidgetCheck->setHorizontalHeaderLabels(headrs); + for(int i=0;itableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); } - measureCalList.clear(); - for(int i=0;itableWidget_Point->rowCount();i++){ - Qt::CheckState state = ui->tableWidget_Point->item(i,0)->checkState(); - if(state == Qt::Checked){ - QStringList& item = calibrationList[i]; - int cnt = ui->tableWidget_Point->item(i,2)->text().toInt(); - for(int j=0;jtableWidgetCheck->rowCount(); - ui->tableWidgetCheck->insertRow(rowCount); - ui->tableWidgetCheck->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int k=1;ktableWidgetCheck->setItem(row, k, new QTableWidgetItem(item[k])); - } - SaveDeviceMeasureCalibrator measItem; - measItem.item_data_id = item[1]; - measItem.maximum_error_formula = item[10];//最大允许误差(公式) - measItem.error_param_a = item[11];//误差参数a - measItem.error_param_b = item[12];//误差参数b - measItem.params = item[2];//参数 - measItem.capacity=item[3];//量 - measItem.unit=item[4];//单位 - measItem.frequency=item[5];//频率 - measItem.frequency_unit=item[6];//频率单位 - measItem.range_range=item[7];//量程 - measItem.standard_value=item[8];//标准值(输入字段,特殊:指针式万用表输出字段) - measItem.indicating_value=item[15];//示值(输出字段,特殊:指针式万用表输入字段) - measItem.maximum_error=item[10];//最大允许误差(值) - //measItem.absolute_error=item[11];//绝对误差 - measItem.resolution=item[9];//分辨力 - measItem.measure_indication_value=item[19];//被检表示值 - measureCalList.append(measItem); - row++; - } + //tableWidget->setRowCount(data.count()); + int rowCount = 0; + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = ui->tableWidgetCheck->rowCount(); + ui->tableWidgetCheck->insertRow(rowCount); + ui->tableWidgetCheck->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jtableWidgetCheck->setItem(i, j, new QTableWidgetItem(dataRes[i][j])); } } +} + +void CheckWindow::connectDevice(){ if(connectList.length()>0&&connectList[0].type==0) deviceEngine.openDevice(connectList[0].programInterface.visa,"Visa"); if(connectList.length()>1&&connectList[1].type==1) @@ -659,52 +740,140 @@ return nullptr; } +int CheckWindow::getIndexByHeader(QString sLabel,QString sName){ + const auto &headrs = headTableList.value(sLabel); + for(int i=0;iinstruct_config.split(";"); - if(sList.length()>0){ - for (QString& sCmd : sList){ - standardEngine.sendData(sCmd); - } - } - } - } - //被检设备读数 - if(deviceEngine.getState()){ - InstructionLib *instrcutLib = getCmdByCheckName(0,item.params); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); - if(sList.length()>0){ - for (QString& sCmd : sList){ - deviceEngine.sendData(sCmd); - } - } - Delay_MSec(2000); - sRet = deviceEngine.queryData(instrcutLib->instruct_read); - } - } - // - if(sRet==""){ - bool bOk = false; - double dRet = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + initCheckTable(i); + QString sLabel = headTableList.keys()[i]; + QList dataRes = caliDataList.value(sLabel); - if (bOk) { - sRet = QString::number(dRet); + for (int i = 0; i < dataRes.count(); ++i) { + QString sRet=""; + double dStdValue,dError; + //标准器输出 + int idx= getIndexByHeader(sLabel,"检定项目"); + QString sParam = dataRes[i][idx]; + if(standardEngine.getState()){ + InstructionLib *instrcutLib = getCmdByCheckName(1,sParam); + if(instrcutLib!=nullptr){ + QStringList sList = instrcutLib->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + standardEngine.sendData(sCmd); + qDebug() << "standard cmds:" << sCmd; + } + } + } } + //被检设备读数 + if(deviceEngine.getState()){ + InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); + if(instrcutLib!=nullptr){ + QStringList sList = instrcutLib->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + deviceEngine.sendData(sCmd); + qDebug() << "config cmds:" << sCmd; + } + } + Delay_MSec(2000); + qDebug() << "query cmds:" << instrcutLib->instruct_read; + sRet = deviceEngine.queryData(instrcutLib->instruct_read); + idx= getIndexByHeader(sLabel,"单位"); + dStdValue = transUnit(sRet,dataRes[i][idx]); + } + } + // + if(sRet==""){ + bool bOk = false; + dStdValue = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + + if (bOk) { + sRet = QString::number(dStdValue); + //idx= getIndexByHeader(sLabel,"单位"); + //dStdValue = transUnit(sRet,dataRes[i][idx]); + //sRet = QString::number(dStdValue); + } + } + //item.measure_indication_value = sRet; + if(iEquipType==1){ + idx= getIndexByHeader(sLabel,"示值"); + dataRes[i][idx] = QString::number(dStdValue); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dStdValue))); //示值 + idx= getIndexByHeader(sLabel,"标准值"); + double dTmp = dataRes[i][idx].toDouble(); + dError = dStdValue-dTmp; + idx= getIndexByHeader(sLabel,"绝对误差"); + dataRes[i][idx] = QString::number(dError); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dError))); //示值 + } + //ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); } - item.measure_indication_value = sRet; - ui->tableWidgetCheck->setItem(i,15,new QTableWidgetItem(sRet)); //示值 - ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); + caliDataList.insert(sLabel,dataRes); } +// initCheckTable(); +// for(int i=0;iinstruct_config.split(";"); +// if(sList.length()>0){ +// for (QString& sCmd : sList){ +// standardEngine.sendData(sCmd); +// } +// } +// } +// } +// //被检设备读数 +// if(deviceEngine.getState()){ +// InstructionLib *instrcutLib = getCmdByCheckName(0,item.params); +// if(instrcutLib!=nullptr){ +// QStringList sList = instrcutLib->instruct_config.split(";"); +// if(sList.length()>0){ +// for (QString& sCmd : sList){ +// deviceEngine.sendData(sCmd); +// } +// } +// Delay_MSec(2000); +// sRet = deviceEngine.queryData(instrcutLib->instruct_read); +// } +// } +// // +// if(sRet==""){ +// bool bOk = false; +// double dRet = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + +// if (bOk) { +// sRet = QString::number(dRet); +// } +// } +// item.measure_indication_value = sRet; +// ui->tableWidgetCheck->setItem(i,15,new QTableWidgetItem(sRet)); //示值 +// ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); +// } } void CheckWindow::Delay_MSec(unsigned int msec) diff --git a/softwareDirectory/AutoVerScheme/checkwindow.h b/softwareDirectory/AutoVerScheme/checkwindow.h index 2655417..99a9d96 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.h +++ b/softwareDirectory/AutoVerScheme/checkwindow.h @@ -68,12 +68,15 @@ void getCheckMethod(); void initDeviceInfo(QString sId); void deleteItem(QLayout *layout); - void initCheckTable(); + void initCheckTable(int idx); InstructionLib* getCmdByCheckName(int idx,QString name); void Delay_MSec(unsigned int msec); void SetHomePaheCombox(Dept task); bool comboBoxContainsItem(QComboBox *comboBox, const QString &itemText); void showStandard(); + void connectDevice(); + int getIndexByHeader(QString sLabel,QString sName); + double transUnit(QString sData,QString sUnit); private: Ui::CheckWindow *ui; QList programList; @@ -90,6 +93,10 @@ QMap> caliDataList; QMap headTableList; QList catDeviceList; + int curHeadIdx=-1; + int iEquipType=1; + QMap unitTransList; + QString standardId; }; #endif // CHECKWINDOW_H diff --git a/softwareDirectory/AutoVerScheme/checkwindow.ui b/softwareDirectory/AutoVerScheme/checkwindow.ui index e27b34e..e81b305 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.ui +++ b/softwareDirectory/AutoVerScheme/checkwindow.ui @@ -1921,6 +1921,9 @@ + + + diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp index b4a2d42..cd2427a 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp @@ -8,7 +8,7 @@ ui(new Ui::DialogCheckResult) { ui->setupUi(this); - + ui->tableWidget->verticalHeader()->setParent(nullptr); } DialogCheckResult::~DialogCheckResult() @@ -16,43 +16,122 @@ delete ui; } -void DialogCheckResult::initCheckTable(QList measList,QStringList headList,QString sID) +void DialogCheckResult::deleteItem(QLayout *layout) { - ui->tableWidget->verticalHeader()->setParent(nullptr); - ui->tableWidget->setColumnCount(headList.count()); - ui->tableWidget->setHorizontalHeaderLabels(headList); - for(int i=0;itableWidget->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); - } - int rowCount=0; - int row=0; - measureCalList = measList; - measHeadList = headList; - stdId = sID; - for (const SaveDeviceMeasureCalibrator& measItem : measList) - { - //获取行号 并进行添加行 - rowCount = ui->tableWidget->rowCount(); - ui->tableWidget->insertRow(rowCount); - //添加 序号 - ui->tableWidget->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); + QLayoutItem *child; + while ((child = layout->takeAt(0)) != nullptr) + { + //setParent为NULL,防止删除之后界面不消失 + if(child->widget()) + { + child->widget()->setParent(nullptr); + delete child->widget(); + } + else if (child->layout()) + { + deleteItem(child->layout()); + child->layout()->deleteLater(); + } + delete child; + } +} +void DialogCheckResult::initCalDataTable(int idx) +{ + if(curHeadIdx==idx) + return; + curHeadIdx = idx; + QString sLabel = headTableList->keys()[curHeadIdx]; + const auto &dataRes = caliDataList->value(sLabel); + const auto &headrs = headTableList->value(sLabel); + ui->tableWidget->clearContents(); + ui->tableWidget->setRowCount(0); + ui->tableWidget->setColumnCount(0); + ui->tableWidget->setColumnCount(headrs.count()); + ui->tableWidget->setHorizontalHeaderLabels(headrs); + for(int i=0;itableWidget->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); + } + //tableWidget->setRowCount(data.count()); + int rowCount = 0; + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = ui->tableWidget->rowCount(); + ui->tableWidget->insertRow(rowCount); + ui->tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jtableWidget->setItem(i, j, new QTableWidgetItem(dataRes[i][j])); + } + } +} - ui->tableWidget->setItem(row, 2, new QTableWidgetItem(measItem.params)); - ui->tableWidget->setItem(row, 3, new QTableWidgetItem(measItem.capacity)); - ui->tableWidget->setItem(row, 4, new QTableWidgetItem(measItem.unit)); - ui->tableWidget->setItem(row, 5, new QTableWidgetItem(measItem.frequency)); - ui->tableWidget->setItem(row, 6, new QTableWidgetItem(measItem.frequency_unit)); - ui->tableWidget->setItem(row, 7, new QTableWidgetItem(measItem.range_range)); - ui->tableWidget->setItem(row, 8, new QTableWidgetItem(measItem.standard_value)); - ui->tableWidget->setItem(row, 9, new QTableWidgetItem(measItem.resolution)); - ui->tableWidget->setItem(row, 10, new QTableWidgetItem(measItem.maximum_error)); - ui->tableWidget->setItem(row, 11, new QTableWidgetItem(measItem.error_param_a)); - ui->tableWidget->setItem(row, 12, new QTableWidgetItem(measItem.error_param_b)); - ui->tableWidget->setItem(row, 15, new QTableWidgetItem(measItem.indicating_value)); - ui->tableWidget->setItem(row, 19, new QTableWidgetItem(measItem.measure_indication_value)); - row++; - } + +void DialogCheckResult::initCheckTable(QMap> *measList,QMap *headList,QString sID) +{ + caliDataList = measList; + headTableList = headList; + stdId = sID; + ui->tableWidget->clearContents(); + ui->tableWidget->setRowCount(0); + deleteItem(ui->HeadListLayout); + int index=0; + for (const auto &item : *headTableList) { + // ======================================================================================== + // 数据循环显示 + // =================================================================================== + QString sLabel = headTableList->keys()[index]; + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(sLabel, this); + //设置样式 + // 设置按钮大小为 56x20 + button->setFixedSize(85, 40); + button->setCheckable(true); + button->setAutoExclusive(true); + //设置第一个按钮选中状态 + if(index==0){ button->setChecked(true);} + //button->setc(true); + // 设置按钮样式表 + button->setStyleSheet("QPushButton {" + "border: 1px solid white;" // 白色边框 + "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 + "background-color: rgba(242, 242, 242, 1);" // 浅灰色背景 + "}" + "QPushButton:hover {" + "background-color: rgba(215, 215, 215, 1);;" // 鼠标悬停时变为深灰色背景 + "}" + "QPushButton:checked {" + "color: white;" + "background-color: rgb(74, 102, 186);" // 选中时变为蓝色背景 + "}"); + + ui->HeadListLayout->addWidget(button); + connect(button, &QPushButton::clicked, this, [this,index]() { + //tackedWidget->setCurrentIndex(index); + initCalDataTable(index); + }); + ++index; + } + ui->HeadListLayout->addStretch(); + initCalDataTable(0); + + QList CliTable = BaseCommonApi::getJudgeCalibrationTable(deviceId); + if(CliTable.length()>0){ + iEquipType = CliTable[0].belong_standard_equipment.toInt(); + } + catoryList = BaseCommonApi::getDeviceMeasureEquipmentCatory(deviceId); +} + +QString DialogCheckResult::getValueByHeader(int idx,QString sLabel,QString sName){ + QList dataRes = caliDataList->value(sLabel); + const auto &headrs = headTableList->value(sLabel); + for(int i=0;ilineEditTemp->text(); measInfo.humidity =ui->lineEdit_Hum->text(); measInfo.measure_address=ui->comboBoxPlace->currentText(); @@ -81,12 +165,40 @@ equipment.create_time=equipment.update_time=QDateTime::currentDateTime(); BaseCommonApi::InsertDeviceMeasureEquipment(equipment); } - - for(SaveDeviceMeasureCalibrator& item:measureCalList){ - item.id = QString::number(api.generateId()); - item.data_id = measInfo.id; - BaseCommonApi::InsertVerMultiCal(item); + for (int k=0;kkeys().length();k++) { + QString sLabel = headTableList->keys()[k]; + const auto &dataRes = caliDataList->value(sLabel); + //tableWidget->setRowCount(data.count()); + if(iEquipType==1){ + for (int i = 0; i < dataRes.count(); ++i) { + SaveDeviceMeasureCalibrator measItem; + measItem.id = QString::number(api.generateId()); + measItem.data_id = measInfo.id; + measItem.item_data_id = getValueByHeader(i,sLabel,"序号"); + measItem.maximum_error_formula = getValueByHeader(i,sLabel,"最大允许误差");//最大允许误差(公式) + //measItem.error_param_a = item[11];//误差参数a + //measItem.error_param_b = item[12];//误差参数b + measItem.params = getValueByHeader(i,sLabel,"检定项目");//参数 + measItem.capacity=getValueByHeader(i,sLabel,"量");//量 + measItem.unit=getValueByHeader(i,sLabel,"单位");//单位 + //measItem.frequency=item[5];//频率 + //measItem.frequency_unit=item[6];//频率单位 + measItem.range_range=getValueByHeader(i,sLabel,"量程");//量程 + measItem.standard_value=getValueByHeader(i,sLabel,"标准值");//标准值(输入字段,特殊:指针式万用表输出字段) + measItem.indicating_value=getValueByHeader(i,sLabel,"示值");//示值(输出字段,特殊:指针式万用表输入字段) + measItem.maximum_error=getValueByHeader(i,sLabel,"最大允许误差");//最大允许误差(值) + measItem.absolute_error=getValueByHeader(i,sLabel,"绝对误差");//绝对误差 + measItem.resolution=getValueByHeader(i,sLabel,"分辨力");//分辨力 + measItem.measure_indication_value=getValueByHeader(i,sLabel,"示值");//被检表示值 + BaseCommonApi::InsertVerMultiCal(measItem); + } + } } +// for(SaveDeviceMeasureCalibrator& item:measureCalList){ +// item.id = QString::number(api.generateId()); +// item.data_id = measInfo.id; +// BaseCommonApi::InsertVerMultiCal(item); +// } QMessageBox::information(this, "提示", "保存成功!"); } else @@ -105,38 +217,72 @@ QStringList conentList; itemList <<"unit"<<"address"<<"jianAddr"<<"time2"<<"temperature"<<"humidity"; conentList <<""<<""<comboBoxPlace->currentText()<dateEditCheck->text()<lineEditTemp->text()<lineEdit_Hum->text(); - engine.setMarks("unit",""); + engine.setMarks("unit",taskList[0].customer_name); engine.setMarks("address",""); + engine.setMarks("name",taskList[0].sample_name); + engine.setMarks("type",taskList[0].sample_model); + engine.setMarks("serial",taskList[0].manufacture_no); + engine.setMarks("factory",taskList[0].manufacturer); engine.setMarks("jianAddr",ui->comboBoxPlace->currentText()); engine.setMarks("time2",ui->dateEditCheck->text()); engine.setMarks("temperature",ui->lineEditTemp->text()); engine.setMarks("humidity",ui->lineEdit_Hum->text()); + QList result = BaseCommonApi::getCatDeviceInfor(stdId); + if(result.length()>0){ + engine.setMarks("stdname",result[0].equipment_name); + engine.setMarks("stdtype",result[0].model); + engine.setMarks("stdno",result[0].manufacture_no); + engine.setMarks("stduncert",""); + engine.setMarks("stdvalid",result[0].measure_valid_date); + } + //engine.setBatchMarks(itemList,conentLis;t) QString strLabel = "result"; //engine.setMarks(strLabel,"1.表格1"); - QString strTitle = "1.表格1"; - int rows = measureCalList.length()+1; - int cols = measHeadList.length(); - QAxObject* pTable = engine.insertTable(strLabel,rows,cols,strTitle); - for (int i=0;ikeys().length()-1;k>=0;k--) { + QString sLabel = headTableList->keys()[k]; + QString strTitle = QString("%1.%2").arg(k+2).arg(sLabel); + const auto &headrs = headTableList->value(sLabel); + const auto &dataRes = caliDataList->value(sLabel); + int rows = dataRes.count()+1; + int cols = headrs.length(); + QAxObject* pTable = engine.insertTable(strLabel,rows,cols,strTitle); + for (int i=0;isetRowCount(data.count()); + for (int i = 0; i < dataRes.count(); ++i) { + engine.setCellString(pTable,i+2,1,QString::number(i+1)); + for(int j=1;j measList,QStringList headList,QString sID); + void initCheckTable(QMap> *measList,QMap *headList,QString sID); private slots: void on_pushButton_3_clicked(); @@ -24,6 +24,10 @@ void on_pushButton_2_clicked(); void on_pushButton_clicked(); +private: + void deleteItem(QLayout *layout); + void initCalDataTable(int idx); + QString getValueByHeader(int idx,QString sLabel,QString sName); public: QList taskList; @@ -32,7 +36,12 @@ Ui::DialogCheckResult *ui; QList measureCalList; QStringList measHeadList; + QMap> *caliDataList; + QMap *headTableList; QString stdId; + int curHeadIdx=-1; + int iEquipType; + QList catoryList; }; #endif // DIALOGCHECKRESULT_H diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.ui b/softwareDirectory/AutoVerScheme/dialogcheckresult.ui index 3be74e6..c8d624f 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.ui +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.ui @@ -6,8 +6,8 @@ 0 0 - 959 - 723 + 1334 + 789 @@ -255,6 +255,9 @@ + + + false diff --git a/softwareDirectory/AutoVerScheme/formaddrsetting.cpp b/softwareDirectory/AutoVerScheme/formaddrsetting.cpp index 11bc88b..4c664e8 100644 --- a/softwareDirectory/AutoVerScheme/formaddrsetting.cpp +++ b/softwareDirectory/AutoVerScheme/formaddrsetting.cpp @@ -141,6 +141,7 @@ if(result.length()>0){ sName = result[0].equipment_name; } + cmd.verification_program_id = sId; cmd.device_id = sId; cmd.device_name = sName; } @@ -149,6 +150,7 @@ if(result.length()>0){ sName = result[0].equipment_name; } + cmd.verification_program_id = sId; cmd.device_id = sId; cmd.device_name = sName; } diff --git a/softwareDirectory/AutoVerScheme/checkwindow.cpp b/softwareDirectory/AutoVerScheme/checkwindow.cpp index 8e5d8ea..b528b5e 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.cpp +++ b/softwareDirectory/AutoVerScheme/checkwindow.cpp @@ -41,6 +41,18 @@ ui->comboBoxName->addItem("ALL"); ui->comboBoxModal->addItem("ALL"); ui->comboBoxCustomer->addItem("ALL"); + + //统一定义单位转换系数 + unitTransList.insert("V",1); + unitTransList.insert("MV",1000); + unitTransList.insert("A",1); + unitTransList.insert("MA",1000); + unitTransList.insert("UA",1000000); + unitTransList.insert("W",1); + unitTransList.insert("KW",0.001); + unitTransList.insert("Ω",1); + unitTransList.insert("KΩ",0.001); + unitTransList.insert("KΩ",0.000001); getCheckDevice(); //ui->stackedWidget_2->setCurrentIndex(1); //ui->tableWidgetDevice->verticalHeader()->sectionResizeMode(QHeaderView::Stretch); @@ -153,6 +165,7 @@ void CheckWindow::initDeviceInfo(QString sId) { + standardId = sId; QString strStyle = QString("QLabel{image:url(%1);}").arg(programInfo.img_path); qDebug() << "strStyle:" << strStyle; ui->label_8->setStyleSheet(strStyle); @@ -184,7 +197,7 @@ if(addrList.length()>0){ info.programInterface = addrList[0]; } - info.cmdList = BaseCommonApi::getInstructionLib(info.id); + info.cmdList = BaseCommonApi::getInstructionLib(programInfo.id); connectList.append(info); addrList.clear(); } @@ -266,6 +279,10 @@ { //QStringList idList=programInfo.tested_device_id.split(","); QString deviceId = selectTaskList[0].sample_id; + QList CliTable = BaseCommonApi::getJudgeCalibrationTable(deviceId); + if(CliTable.length()>0){ + iEquipType = CliTable[0].belong_standard_equipment.toInt(); + } //QStringList headlist; headList.clear(); calibrationList.clear(); @@ -276,6 +293,7 @@ //tableWidgetItem ui->tableWidget_Point->clearContents(); ui->tableWidget_Point->setRowCount(0); + deleteItem(ui->HeadListLayout); //循环数据 int rowCount=0; int row=0; @@ -296,7 +314,8 @@ // ======================================================================================== // 数据循环显示 // =================================================================================== - const auto &dataRes = caliDataList.value(headTableList.keys()[index]); + QString sLabel = headTableList.keys()[index]; + const auto &dataRes = caliDataList.value(sLabel); //tableWidget->setRowCount(data.count()); for (int i = 0; i < dataRes.count(); ++i) { @@ -309,11 +328,43 @@ ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1")); row++; } + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(sLabel, this); + //设置样式 + // 设置按钮大小为 56x20 + button->setFixedSize(85, 40); + button->setCheckable(true); + button->setAutoExclusive(true); + //设置第一个按钮选中状态 + if(index==0){ button->setChecked(true);} + //button->setc(true); + // 设置按钮样式表 + button->setStyleSheet("QPushButton {" + "border: 1px solid white;" // 白色边框 + "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 + "background-color: rgba(242, 242, 242, 1);" // 浅灰色背景 + "}" + "QPushButton:hover {" + "background-color: rgba(215, 215, 215, 1);;" // 鼠标悬停时变为深灰色背景 + "}" + "QPushButton:checked {" + "color: white;" + "background-color: rgb(74, 102, 186);" // 选中时变为蓝色背景 + "}"); + + ui->HeadListLayout->addWidget(button); + connect(button, &QPushButton::clicked, this, [this,index]() { + //tackedWidget->setCurrentIndex(index); + initCheckTable(index); + }); ++index; } + ui->HeadListLayout->addStretch(); } - ui->stackedWidget_2->setCurrentIndex(1); + initCheckTable(0); } void CheckWindow::on_deviceButton_clicked(Dept task,int idx) @@ -371,8 +422,8 @@ { DialogCheckResult* dlg = new DialogCheckResult; dlg->taskList =selectTaskList; - dlg->deviceId = programInfo.tested_device_id; - dlg->initCheckTable(measureCalList,headList,programInfo.standard_device_id); + dlg->deviceId = selectTaskList[0].sample_id; + dlg->initCheckTable(&caliDataList,&headTableList,standardId); dlg->setModal(true); dlg->show(); } @@ -592,56 +643,86 @@ } } -void CheckWindow::initCheckTable() +void CheckWindow::initCheckTable(int idx) { +// ui->tableWidgetCheck->clearContents(); +// ui->tableWidgetCheck->setRowCount(0); +// ui->tableWidgetCheck->setColumnCount(0); +// int rowCount = 0; +// int row=0; +// ui->tableWidgetCheck->setColumnCount(headList.count()); +// ui->tableWidgetCheck->setHorizontalHeaderLabels(headList); +// for(int i=0;itableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); +// } +// measureCalList.clear(); +// for(int i=0;itableWidget_Point->rowCount();i++){ +// Qt::CheckState state = ui->tableWidget_Point->item(i,0)->checkState(); +// if(state == Qt::Checked){ +// QStringList& item = calibrationList[i]; +// int cnt = ui->tableWidget_Point->item(i,2)->text().toInt(); +// for(int j=0;jtableWidgetCheck->rowCount(); +// ui->tableWidgetCheck->insertRow(rowCount); +// ui->tableWidgetCheck->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); +// //循环读取值 headlist,count是列的数量 +// for(int k=1;ktableWidgetCheck->setItem(row, k, new QTableWidgetItem(item[k])); +// } +// SaveDeviceMeasureCalibrator measItem; +// measItem.item_data_id = item[1]; +// measItem.maximum_error_formula = item[10];//最大允许误差(公式) +// measItem.error_param_a = item[11];//误差参数a +// measItem.error_param_b = item[12];//误差参数b +// measItem.params = item[2];//参数 +// measItem.capacity=item[3];//量 +// measItem.unit=item[4];//单位 +// measItem.frequency=item[5];//频率 +// measItem.frequency_unit=item[6];//频率单位 +// measItem.range_range=item[7];//量程 +// measItem.standard_value=item[8];//标准值(输入字段,特殊:指针式万用表输出字段) +// measItem.indicating_value=item[15];//示值(输出字段,特殊:指针式万用表输入字段) +// measItem.maximum_error=item[10];//最大允许误差(值) +// //measItem.absolute_error=item[11];//绝对误差 +// measItem.resolution=item[9];//分辨力 +// measItem.measure_indication_value=item[19];//被检表示值 +// measureCalList.append(measItem); +// row++; +// } +// } +// } + if(curHeadIdx==idx) + return; + curHeadIdx = idx; + QString sLabel = headTableList.keys()[curHeadIdx]; + const auto &dataRes = caliDataList.value(sLabel); + const auto &headrs = headTableList.value(sLabel); ui->tableWidgetCheck->clearContents(); ui->tableWidgetCheck->setRowCount(0); ui->tableWidgetCheck->setColumnCount(0); - int rowCount = 0; - int row=0; - ui->tableWidgetCheck->setColumnCount(headList.count()); - ui->tableWidgetCheck->setHorizontalHeaderLabels(headList); - for(int i=0;itableWidgetCheck->setColumnCount(headrs.count()); + ui->tableWidgetCheck->setHorizontalHeaderLabels(headrs); + for(int i=0;itableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); } - measureCalList.clear(); - for(int i=0;itableWidget_Point->rowCount();i++){ - Qt::CheckState state = ui->tableWidget_Point->item(i,0)->checkState(); - if(state == Qt::Checked){ - QStringList& item = calibrationList[i]; - int cnt = ui->tableWidget_Point->item(i,2)->text().toInt(); - for(int j=0;jtableWidgetCheck->rowCount(); - ui->tableWidgetCheck->insertRow(rowCount); - ui->tableWidgetCheck->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int k=1;ktableWidgetCheck->setItem(row, k, new QTableWidgetItem(item[k])); - } - SaveDeviceMeasureCalibrator measItem; - measItem.item_data_id = item[1]; - measItem.maximum_error_formula = item[10];//最大允许误差(公式) - measItem.error_param_a = item[11];//误差参数a - measItem.error_param_b = item[12];//误差参数b - measItem.params = item[2];//参数 - measItem.capacity=item[3];//量 - measItem.unit=item[4];//单位 - measItem.frequency=item[5];//频率 - measItem.frequency_unit=item[6];//频率单位 - measItem.range_range=item[7];//量程 - measItem.standard_value=item[8];//标准值(输入字段,特殊:指针式万用表输出字段) - measItem.indicating_value=item[15];//示值(输出字段,特殊:指针式万用表输入字段) - measItem.maximum_error=item[10];//最大允许误差(值) - //measItem.absolute_error=item[11];//绝对误差 - measItem.resolution=item[9];//分辨力 - measItem.measure_indication_value=item[19];//被检表示值 - measureCalList.append(measItem); - row++; - } + //tableWidget->setRowCount(data.count()); + int rowCount = 0; + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = ui->tableWidgetCheck->rowCount(); + ui->tableWidgetCheck->insertRow(rowCount); + ui->tableWidgetCheck->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jtableWidgetCheck->setItem(i, j, new QTableWidgetItem(dataRes[i][j])); } } +} + +void CheckWindow::connectDevice(){ if(connectList.length()>0&&connectList[0].type==0) deviceEngine.openDevice(connectList[0].programInterface.visa,"Visa"); if(connectList.length()>1&&connectList[1].type==1) @@ -659,52 +740,140 @@ return nullptr; } +int CheckWindow::getIndexByHeader(QString sLabel,QString sName){ + const auto &headrs = headTableList.value(sLabel); + for(int i=0;iinstruct_config.split(";"); - if(sList.length()>0){ - for (QString& sCmd : sList){ - standardEngine.sendData(sCmd); - } - } - } - } - //被检设备读数 - if(deviceEngine.getState()){ - InstructionLib *instrcutLib = getCmdByCheckName(0,item.params); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); - if(sList.length()>0){ - for (QString& sCmd : sList){ - deviceEngine.sendData(sCmd); - } - } - Delay_MSec(2000); - sRet = deviceEngine.queryData(instrcutLib->instruct_read); - } - } - // - if(sRet==""){ - bool bOk = false; - double dRet = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + initCheckTable(i); + QString sLabel = headTableList.keys()[i]; + QList dataRes = caliDataList.value(sLabel); - if (bOk) { - sRet = QString::number(dRet); + for (int i = 0; i < dataRes.count(); ++i) { + QString sRet=""; + double dStdValue,dError; + //标准器输出 + int idx= getIndexByHeader(sLabel,"检定项目"); + QString sParam = dataRes[i][idx]; + if(standardEngine.getState()){ + InstructionLib *instrcutLib = getCmdByCheckName(1,sParam); + if(instrcutLib!=nullptr){ + QStringList sList = instrcutLib->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + standardEngine.sendData(sCmd); + qDebug() << "standard cmds:" << sCmd; + } + } + } } + //被检设备读数 + if(deviceEngine.getState()){ + InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); + if(instrcutLib!=nullptr){ + QStringList sList = instrcutLib->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + deviceEngine.sendData(sCmd); + qDebug() << "config cmds:" << sCmd; + } + } + Delay_MSec(2000); + qDebug() << "query cmds:" << instrcutLib->instruct_read; + sRet = deviceEngine.queryData(instrcutLib->instruct_read); + idx= getIndexByHeader(sLabel,"单位"); + dStdValue = transUnit(sRet,dataRes[i][idx]); + } + } + // + if(sRet==""){ + bool bOk = false; + dStdValue = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + + if (bOk) { + sRet = QString::number(dStdValue); + //idx= getIndexByHeader(sLabel,"单位"); + //dStdValue = transUnit(sRet,dataRes[i][idx]); + //sRet = QString::number(dStdValue); + } + } + //item.measure_indication_value = sRet; + if(iEquipType==1){ + idx= getIndexByHeader(sLabel,"示值"); + dataRes[i][idx] = QString::number(dStdValue); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dStdValue))); //示值 + idx= getIndexByHeader(sLabel,"标准值"); + double dTmp = dataRes[i][idx].toDouble(); + dError = dStdValue-dTmp; + idx= getIndexByHeader(sLabel,"绝对误差"); + dataRes[i][idx] = QString::number(dError); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dError))); //示值 + } + //ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); } - item.measure_indication_value = sRet; - ui->tableWidgetCheck->setItem(i,15,new QTableWidgetItem(sRet)); //示值 - ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); + caliDataList.insert(sLabel,dataRes); } +// initCheckTable(); +// for(int i=0;iinstruct_config.split(";"); +// if(sList.length()>0){ +// for (QString& sCmd : sList){ +// standardEngine.sendData(sCmd); +// } +// } +// } +// } +// //被检设备读数 +// if(deviceEngine.getState()){ +// InstructionLib *instrcutLib = getCmdByCheckName(0,item.params); +// if(instrcutLib!=nullptr){ +// QStringList sList = instrcutLib->instruct_config.split(";"); +// if(sList.length()>0){ +// for (QString& sCmd : sList){ +// deviceEngine.sendData(sCmd); +// } +// } +// Delay_MSec(2000); +// sRet = deviceEngine.queryData(instrcutLib->instruct_read); +// } +// } +// // +// if(sRet==""){ +// bool bOk = false; +// double dRet = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + +// if (bOk) { +// sRet = QString::number(dRet); +// } +// } +// item.measure_indication_value = sRet; +// ui->tableWidgetCheck->setItem(i,15,new QTableWidgetItem(sRet)); //示值 +// ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); +// } } void CheckWindow::Delay_MSec(unsigned int msec) diff --git a/softwareDirectory/AutoVerScheme/checkwindow.h b/softwareDirectory/AutoVerScheme/checkwindow.h index 2655417..99a9d96 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.h +++ b/softwareDirectory/AutoVerScheme/checkwindow.h @@ -68,12 +68,15 @@ void getCheckMethod(); void initDeviceInfo(QString sId); void deleteItem(QLayout *layout); - void initCheckTable(); + void initCheckTable(int idx); InstructionLib* getCmdByCheckName(int idx,QString name); void Delay_MSec(unsigned int msec); void SetHomePaheCombox(Dept task); bool comboBoxContainsItem(QComboBox *comboBox, const QString &itemText); void showStandard(); + void connectDevice(); + int getIndexByHeader(QString sLabel,QString sName); + double transUnit(QString sData,QString sUnit); private: Ui::CheckWindow *ui; QList programList; @@ -90,6 +93,10 @@ QMap> caliDataList; QMap headTableList; QList catDeviceList; + int curHeadIdx=-1; + int iEquipType=1; + QMap unitTransList; + QString standardId; }; #endif // CHECKWINDOW_H diff --git a/softwareDirectory/AutoVerScheme/checkwindow.ui b/softwareDirectory/AutoVerScheme/checkwindow.ui index e27b34e..e81b305 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.ui +++ b/softwareDirectory/AutoVerScheme/checkwindow.ui @@ -1921,6 +1921,9 @@ + + + diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp index b4a2d42..cd2427a 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp @@ -8,7 +8,7 @@ ui(new Ui::DialogCheckResult) { ui->setupUi(this); - + ui->tableWidget->verticalHeader()->setParent(nullptr); } DialogCheckResult::~DialogCheckResult() @@ -16,43 +16,122 @@ delete ui; } -void DialogCheckResult::initCheckTable(QList measList,QStringList headList,QString sID) +void DialogCheckResult::deleteItem(QLayout *layout) { - ui->tableWidget->verticalHeader()->setParent(nullptr); - ui->tableWidget->setColumnCount(headList.count()); - ui->tableWidget->setHorizontalHeaderLabels(headList); - for(int i=0;itableWidget->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); - } - int rowCount=0; - int row=0; - measureCalList = measList; - measHeadList = headList; - stdId = sID; - for (const SaveDeviceMeasureCalibrator& measItem : measList) - { - //获取行号 并进行添加行 - rowCount = ui->tableWidget->rowCount(); - ui->tableWidget->insertRow(rowCount); - //添加 序号 - ui->tableWidget->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); + QLayoutItem *child; + while ((child = layout->takeAt(0)) != nullptr) + { + //setParent为NULL,防止删除之后界面不消失 + if(child->widget()) + { + child->widget()->setParent(nullptr); + delete child->widget(); + } + else if (child->layout()) + { + deleteItem(child->layout()); + child->layout()->deleteLater(); + } + delete child; + } +} +void DialogCheckResult::initCalDataTable(int idx) +{ + if(curHeadIdx==idx) + return; + curHeadIdx = idx; + QString sLabel = headTableList->keys()[curHeadIdx]; + const auto &dataRes = caliDataList->value(sLabel); + const auto &headrs = headTableList->value(sLabel); + ui->tableWidget->clearContents(); + ui->tableWidget->setRowCount(0); + ui->tableWidget->setColumnCount(0); + ui->tableWidget->setColumnCount(headrs.count()); + ui->tableWidget->setHorizontalHeaderLabels(headrs); + for(int i=0;itableWidget->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); + } + //tableWidget->setRowCount(data.count()); + int rowCount = 0; + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = ui->tableWidget->rowCount(); + ui->tableWidget->insertRow(rowCount); + ui->tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jtableWidget->setItem(i, j, new QTableWidgetItem(dataRes[i][j])); + } + } +} - ui->tableWidget->setItem(row, 2, new QTableWidgetItem(measItem.params)); - ui->tableWidget->setItem(row, 3, new QTableWidgetItem(measItem.capacity)); - ui->tableWidget->setItem(row, 4, new QTableWidgetItem(measItem.unit)); - ui->tableWidget->setItem(row, 5, new QTableWidgetItem(measItem.frequency)); - ui->tableWidget->setItem(row, 6, new QTableWidgetItem(measItem.frequency_unit)); - ui->tableWidget->setItem(row, 7, new QTableWidgetItem(measItem.range_range)); - ui->tableWidget->setItem(row, 8, new QTableWidgetItem(measItem.standard_value)); - ui->tableWidget->setItem(row, 9, new QTableWidgetItem(measItem.resolution)); - ui->tableWidget->setItem(row, 10, new QTableWidgetItem(measItem.maximum_error)); - ui->tableWidget->setItem(row, 11, new QTableWidgetItem(measItem.error_param_a)); - ui->tableWidget->setItem(row, 12, new QTableWidgetItem(measItem.error_param_b)); - ui->tableWidget->setItem(row, 15, new QTableWidgetItem(measItem.indicating_value)); - ui->tableWidget->setItem(row, 19, new QTableWidgetItem(measItem.measure_indication_value)); - row++; - } + +void DialogCheckResult::initCheckTable(QMap> *measList,QMap *headList,QString sID) +{ + caliDataList = measList; + headTableList = headList; + stdId = sID; + ui->tableWidget->clearContents(); + ui->tableWidget->setRowCount(0); + deleteItem(ui->HeadListLayout); + int index=0; + for (const auto &item : *headTableList) { + // ======================================================================================== + // 数据循环显示 + // =================================================================================== + QString sLabel = headTableList->keys()[index]; + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(sLabel, this); + //设置样式 + // 设置按钮大小为 56x20 + button->setFixedSize(85, 40); + button->setCheckable(true); + button->setAutoExclusive(true); + //设置第一个按钮选中状态 + if(index==0){ button->setChecked(true);} + //button->setc(true); + // 设置按钮样式表 + button->setStyleSheet("QPushButton {" + "border: 1px solid white;" // 白色边框 + "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 + "background-color: rgba(242, 242, 242, 1);" // 浅灰色背景 + "}" + "QPushButton:hover {" + "background-color: rgba(215, 215, 215, 1);;" // 鼠标悬停时变为深灰色背景 + "}" + "QPushButton:checked {" + "color: white;" + "background-color: rgb(74, 102, 186);" // 选中时变为蓝色背景 + "}"); + + ui->HeadListLayout->addWidget(button); + connect(button, &QPushButton::clicked, this, [this,index]() { + //tackedWidget->setCurrentIndex(index); + initCalDataTable(index); + }); + ++index; + } + ui->HeadListLayout->addStretch(); + initCalDataTable(0); + + QList CliTable = BaseCommonApi::getJudgeCalibrationTable(deviceId); + if(CliTable.length()>0){ + iEquipType = CliTable[0].belong_standard_equipment.toInt(); + } + catoryList = BaseCommonApi::getDeviceMeasureEquipmentCatory(deviceId); +} + +QString DialogCheckResult::getValueByHeader(int idx,QString sLabel,QString sName){ + QList dataRes = caliDataList->value(sLabel); + const auto &headrs = headTableList->value(sLabel); + for(int i=0;ilineEditTemp->text(); measInfo.humidity =ui->lineEdit_Hum->text(); measInfo.measure_address=ui->comboBoxPlace->currentText(); @@ -81,12 +165,40 @@ equipment.create_time=equipment.update_time=QDateTime::currentDateTime(); BaseCommonApi::InsertDeviceMeasureEquipment(equipment); } - - for(SaveDeviceMeasureCalibrator& item:measureCalList){ - item.id = QString::number(api.generateId()); - item.data_id = measInfo.id; - BaseCommonApi::InsertVerMultiCal(item); + for (int k=0;kkeys().length();k++) { + QString sLabel = headTableList->keys()[k]; + const auto &dataRes = caliDataList->value(sLabel); + //tableWidget->setRowCount(data.count()); + if(iEquipType==1){ + for (int i = 0; i < dataRes.count(); ++i) { + SaveDeviceMeasureCalibrator measItem; + measItem.id = QString::number(api.generateId()); + measItem.data_id = measInfo.id; + measItem.item_data_id = getValueByHeader(i,sLabel,"序号"); + measItem.maximum_error_formula = getValueByHeader(i,sLabel,"最大允许误差");//最大允许误差(公式) + //measItem.error_param_a = item[11];//误差参数a + //measItem.error_param_b = item[12];//误差参数b + measItem.params = getValueByHeader(i,sLabel,"检定项目");//参数 + measItem.capacity=getValueByHeader(i,sLabel,"量");//量 + measItem.unit=getValueByHeader(i,sLabel,"单位");//单位 + //measItem.frequency=item[5];//频率 + //measItem.frequency_unit=item[6];//频率单位 + measItem.range_range=getValueByHeader(i,sLabel,"量程");//量程 + measItem.standard_value=getValueByHeader(i,sLabel,"标准值");//标准值(输入字段,特殊:指针式万用表输出字段) + measItem.indicating_value=getValueByHeader(i,sLabel,"示值");//示值(输出字段,特殊:指针式万用表输入字段) + measItem.maximum_error=getValueByHeader(i,sLabel,"最大允许误差");//最大允许误差(值) + measItem.absolute_error=getValueByHeader(i,sLabel,"绝对误差");//绝对误差 + measItem.resolution=getValueByHeader(i,sLabel,"分辨力");//分辨力 + measItem.measure_indication_value=getValueByHeader(i,sLabel,"示值");//被检表示值 + BaseCommonApi::InsertVerMultiCal(measItem); + } + } } +// for(SaveDeviceMeasureCalibrator& item:measureCalList){ +// item.id = QString::number(api.generateId()); +// item.data_id = measInfo.id; +// BaseCommonApi::InsertVerMultiCal(item); +// } QMessageBox::information(this, "提示", "保存成功!"); } else @@ -105,38 +217,72 @@ QStringList conentList; itemList <<"unit"<<"address"<<"jianAddr"<<"time2"<<"temperature"<<"humidity"; conentList <<""<<""<comboBoxPlace->currentText()<dateEditCheck->text()<lineEditTemp->text()<lineEdit_Hum->text(); - engine.setMarks("unit",""); + engine.setMarks("unit",taskList[0].customer_name); engine.setMarks("address",""); + engine.setMarks("name",taskList[0].sample_name); + engine.setMarks("type",taskList[0].sample_model); + engine.setMarks("serial",taskList[0].manufacture_no); + engine.setMarks("factory",taskList[0].manufacturer); engine.setMarks("jianAddr",ui->comboBoxPlace->currentText()); engine.setMarks("time2",ui->dateEditCheck->text()); engine.setMarks("temperature",ui->lineEditTemp->text()); engine.setMarks("humidity",ui->lineEdit_Hum->text()); + QList result = BaseCommonApi::getCatDeviceInfor(stdId); + if(result.length()>0){ + engine.setMarks("stdname",result[0].equipment_name); + engine.setMarks("stdtype",result[0].model); + engine.setMarks("stdno",result[0].manufacture_no); + engine.setMarks("stduncert",""); + engine.setMarks("stdvalid",result[0].measure_valid_date); + } + //engine.setBatchMarks(itemList,conentLis;t) QString strLabel = "result"; //engine.setMarks(strLabel,"1.表格1"); - QString strTitle = "1.表格1"; - int rows = measureCalList.length()+1; - int cols = measHeadList.length(); - QAxObject* pTable = engine.insertTable(strLabel,rows,cols,strTitle); - for (int i=0;ikeys().length()-1;k>=0;k--) { + QString sLabel = headTableList->keys()[k]; + QString strTitle = QString("%1.%2").arg(k+2).arg(sLabel); + const auto &headrs = headTableList->value(sLabel); + const auto &dataRes = caliDataList->value(sLabel); + int rows = dataRes.count()+1; + int cols = headrs.length(); + QAxObject* pTable = engine.insertTable(strLabel,rows,cols,strTitle); + for (int i=0;isetRowCount(data.count()); + for (int i = 0; i < dataRes.count(); ++i) { + engine.setCellString(pTable,i+2,1,QString::number(i+1)); + for(int j=1;j measList,QStringList headList,QString sID); + void initCheckTable(QMap> *measList,QMap *headList,QString sID); private slots: void on_pushButton_3_clicked(); @@ -24,6 +24,10 @@ void on_pushButton_2_clicked(); void on_pushButton_clicked(); +private: + void deleteItem(QLayout *layout); + void initCalDataTable(int idx); + QString getValueByHeader(int idx,QString sLabel,QString sName); public: QList taskList; @@ -32,7 +36,12 @@ Ui::DialogCheckResult *ui; QList measureCalList; QStringList measHeadList; + QMap> *caliDataList; + QMap *headTableList; QString stdId; + int curHeadIdx=-1; + int iEquipType; + QList catoryList; }; #endif // DIALOGCHECKRESULT_H diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.ui b/softwareDirectory/AutoVerScheme/dialogcheckresult.ui index 3be74e6..c8d624f 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.ui +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.ui @@ -6,8 +6,8 @@ 0 0 - 959 - 723 + 1334 + 789 @@ -255,6 +255,9 @@ + + + false diff --git a/softwareDirectory/AutoVerScheme/formaddrsetting.cpp b/softwareDirectory/AutoVerScheme/formaddrsetting.cpp index 11bc88b..4c664e8 100644 --- a/softwareDirectory/AutoVerScheme/formaddrsetting.cpp +++ b/softwareDirectory/AutoVerScheme/formaddrsetting.cpp @@ -141,6 +141,7 @@ if(result.length()>0){ sName = result[0].equipment_name; } + cmd.verification_program_id = sId; cmd.device_id = sId; cmd.device_name = sName; } @@ -149,6 +150,7 @@ if(result.length()>0){ sName = result[0].equipment_name; } + cmd.verification_program_id = sId; cmd.device_id = sId; cmd.device_name = sName; } diff --git a/softwareDirectory/AutoVerScheme/formcheckpoint.cpp b/softwareDirectory/AutoVerScheme/formcheckpoint.cpp index cdc2e22..9b65f53 100644 --- a/softwareDirectory/AutoVerScheme/formcheckpoint.cpp +++ b/softwareDirectory/AutoVerScheme/formcheckpoint.cpp @@ -1,6 +1,8 @@ #include "formcheckpoint.h" #include "ui_formcheckpoint.h" #include "basecommonapi.h" +#include +#include FormCheckPoint::FormCheckPoint(QWidget *parent,QString sId) : QWidget(parent), @@ -21,39 +23,99 @@ void FormCheckPoint::updateTable(QString id) { - //获取核查点tablewight的数据 - QStringList headlist; + //每个检定项目列头 + QMap headListItem; //例 + //每个检定项目数据 + QMap> dataListItem; //例 + dataListItem=BaseCommonApi::Search_CalibrationTableClass(id,&headListItem); + QHBoxLayout *layout = ui->HeadListLayout; + QStackedWidget *stackedWidget = ui->stackedWidgetData; + //数据清空 + // 清空QStackedWidget中的所有页 + while (stackedWidget->count() > 0) { + QWidget *widget = stackedWidget->widget(0); // 获取第一个子部件 + stackedWidget->removeWidget(widget); // 从堆叠部件中移除 + delete widget; // 删除部件,防止内存泄漏 + } + // 清空QHBoxLayout中的所有QPushButton + while (QLayoutItem *item = layout->takeAt(0)) { + QWidget *widget = item->widget(); + if (widget && qobject_cast(widget)) { + // 移除并删除QPushButton + delete widget; + } + } + int index = 0; + for (const auto &item : headListItem) { + QTableWidget *tableWidget = new QTableWidget(this); + tableWidget->setColumnCount(item.count()); + tableWidget->setHorizontalHeaderLabels(item); + for(int i=0;ihorizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); + //设置tableWidget样式表 + tableWidget->verticalHeader()->setParent(nullptr); //隐藏行头 + tableWidget->setStyleSheet("QHeaderView::section {" + "border: 1px solid rgba(197, 196, 196, 1);" + "border-left:none;" + "border-top:none;" + "background-color:white;" + "}"); - QList Data=BaseCommonApi::Search_CalibrationTable(id,&headlist); + // ======================================================================================== + // 数据循环显示 + // ==================================================================================== + int rowCount=0; + const auto &dataRes = dataListItem.value(headListItem.keys()[index]); + //tableWidget->setRowCount(data.count()); - //tableWidgetItem - ui->tableWidget->setRowCount(0); - ui->tableWidget->setColumnCount(headlist.count()); - ui->tableWidget->setHorizontalHeaderLabels(headlist); - ui->tableWidget->verticalHeader()->setParent(nullptr); //隐藏行头 - for(int i=0;itableWidget->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); - } - //循环数据 - int rowCount=0; - int row=0; - for (const QStringList& item : Data) - { - //获取行号 并进行添加行 - rowCount = ui->tableWidget->rowCount(); - ui->tableWidget->insertRow(rowCount); - //添加 序号 - ui->tableWidget->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int i=1;itableWidget->setItem(row, i, new QTableWidgetItem(item[i])); - } + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = tableWidget->rowCount(); + tableWidget->insertRow(rowCount); + tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jsetItem(i, j, new QTableWidgetItem(dataRes[i][j])); + } - row++; + } - } + stackedWidget->insertWidget(index,tableWidget); + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(headListItem.keys()[index], this); + //设置样式 + // 设置按钮大小为 56x20 + button->setFixedSize(85, 40); + button->setCheckable(true); + button->setAutoExclusive(true); + //设置第一个按钮选中状态 + if(index==0){ button->setChecked(true);} + //button->setc(true); + // 设置按钮样式表 + button->setStyleSheet("QPushButton {" + "border: 1px solid white;" // 白色边框 + "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 + "background-color: rgba(242, 242, 242, 1);" // 浅灰色背景 + "}" + "QPushButton:hover {" + "background-color: rgba(215, 215, 215, 1);;" // 鼠标悬停时变为深灰色背景 + "}" + "QPushButton:checked {" + "color: white;" + "background-color: rgb(74, 102, 186);" // 选中时变为蓝色背景 + "}"); + + layout->addWidget(button); + connect(button, &QPushButton::clicked, stackedWidget, [stackedWidget, index]() { + stackedWidget->setCurrentIndex(index); + }); + + ++index; + } + //默认启动第一个页面 + stackedWidget->setCurrentIndex(0); } void FormCheckPoint::on_pushButton_14_clicked() diff --git a/softwareDirectory/AutoVerScheme/checkwindow.cpp b/softwareDirectory/AutoVerScheme/checkwindow.cpp index 8e5d8ea..b528b5e 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.cpp +++ b/softwareDirectory/AutoVerScheme/checkwindow.cpp @@ -41,6 +41,18 @@ ui->comboBoxName->addItem("ALL"); ui->comboBoxModal->addItem("ALL"); ui->comboBoxCustomer->addItem("ALL"); + + //统一定义单位转换系数 + unitTransList.insert("V",1); + unitTransList.insert("MV",1000); + unitTransList.insert("A",1); + unitTransList.insert("MA",1000); + unitTransList.insert("UA",1000000); + unitTransList.insert("W",1); + unitTransList.insert("KW",0.001); + unitTransList.insert("Ω",1); + unitTransList.insert("KΩ",0.001); + unitTransList.insert("KΩ",0.000001); getCheckDevice(); //ui->stackedWidget_2->setCurrentIndex(1); //ui->tableWidgetDevice->verticalHeader()->sectionResizeMode(QHeaderView::Stretch); @@ -153,6 +165,7 @@ void CheckWindow::initDeviceInfo(QString sId) { + standardId = sId; QString strStyle = QString("QLabel{image:url(%1);}").arg(programInfo.img_path); qDebug() << "strStyle:" << strStyle; ui->label_8->setStyleSheet(strStyle); @@ -184,7 +197,7 @@ if(addrList.length()>0){ info.programInterface = addrList[0]; } - info.cmdList = BaseCommonApi::getInstructionLib(info.id); + info.cmdList = BaseCommonApi::getInstructionLib(programInfo.id); connectList.append(info); addrList.clear(); } @@ -266,6 +279,10 @@ { //QStringList idList=programInfo.tested_device_id.split(","); QString deviceId = selectTaskList[0].sample_id; + QList CliTable = BaseCommonApi::getJudgeCalibrationTable(deviceId); + if(CliTable.length()>0){ + iEquipType = CliTable[0].belong_standard_equipment.toInt(); + } //QStringList headlist; headList.clear(); calibrationList.clear(); @@ -276,6 +293,7 @@ //tableWidgetItem ui->tableWidget_Point->clearContents(); ui->tableWidget_Point->setRowCount(0); + deleteItem(ui->HeadListLayout); //循环数据 int rowCount=0; int row=0; @@ -296,7 +314,8 @@ // ======================================================================================== // 数据循环显示 // =================================================================================== - const auto &dataRes = caliDataList.value(headTableList.keys()[index]); + QString sLabel = headTableList.keys()[index]; + const auto &dataRes = caliDataList.value(sLabel); //tableWidget->setRowCount(data.count()); for (int i = 0; i < dataRes.count(); ++i) { @@ -309,11 +328,43 @@ ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1")); row++; } + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(sLabel, this); + //设置样式 + // 设置按钮大小为 56x20 + button->setFixedSize(85, 40); + button->setCheckable(true); + button->setAutoExclusive(true); + //设置第一个按钮选中状态 + if(index==0){ button->setChecked(true);} + //button->setc(true); + // 设置按钮样式表 + button->setStyleSheet("QPushButton {" + "border: 1px solid white;" // 白色边框 + "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 + "background-color: rgba(242, 242, 242, 1);" // 浅灰色背景 + "}" + "QPushButton:hover {" + "background-color: rgba(215, 215, 215, 1);;" // 鼠标悬停时变为深灰色背景 + "}" + "QPushButton:checked {" + "color: white;" + "background-color: rgb(74, 102, 186);" // 选中时变为蓝色背景 + "}"); + + ui->HeadListLayout->addWidget(button); + connect(button, &QPushButton::clicked, this, [this,index]() { + //tackedWidget->setCurrentIndex(index); + initCheckTable(index); + }); ++index; } + ui->HeadListLayout->addStretch(); } - ui->stackedWidget_2->setCurrentIndex(1); + initCheckTable(0); } void CheckWindow::on_deviceButton_clicked(Dept task,int idx) @@ -371,8 +422,8 @@ { DialogCheckResult* dlg = new DialogCheckResult; dlg->taskList =selectTaskList; - dlg->deviceId = programInfo.tested_device_id; - dlg->initCheckTable(measureCalList,headList,programInfo.standard_device_id); + dlg->deviceId = selectTaskList[0].sample_id; + dlg->initCheckTable(&caliDataList,&headTableList,standardId); dlg->setModal(true); dlg->show(); } @@ -592,56 +643,86 @@ } } -void CheckWindow::initCheckTable() +void CheckWindow::initCheckTable(int idx) { +// ui->tableWidgetCheck->clearContents(); +// ui->tableWidgetCheck->setRowCount(0); +// ui->tableWidgetCheck->setColumnCount(0); +// int rowCount = 0; +// int row=0; +// ui->tableWidgetCheck->setColumnCount(headList.count()); +// ui->tableWidgetCheck->setHorizontalHeaderLabels(headList); +// for(int i=0;itableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); +// } +// measureCalList.clear(); +// for(int i=0;itableWidget_Point->rowCount();i++){ +// Qt::CheckState state = ui->tableWidget_Point->item(i,0)->checkState(); +// if(state == Qt::Checked){ +// QStringList& item = calibrationList[i]; +// int cnt = ui->tableWidget_Point->item(i,2)->text().toInt(); +// for(int j=0;jtableWidgetCheck->rowCount(); +// ui->tableWidgetCheck->insertRow(rowCount); +// ui->tableWidgetCheck->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); +// //循环读取值 headlist,count是列的数量 +// for(int k=1;ktableWidgetCheck->setItem(row, k, new QTableWidgetItem(item[k])); +// } +// SaveDeviceMeasureCalibrator measItem; +// measItem.item_data_id = item[1]; +// measItem.maximum_error_formula = item[10];//最大允许误差(公式) +// measItem.error_param_a = item[11];//误差参数a +// measItem.error_param_b = item[12];//误差参数b +// measItem.params = item[2];//参数 +// measItem.capacity=item[3];//量 +// measItem.unit=item[4];//单位 +// measItem.frequency=item[5];//频率 +// measItem.frequency_unit=item[6];//频率单位 +// measItem.range_range=item[7];//量程 +// measItem.standard_value=item[8];//标准值(输入字段,特殊:指针式万用表输出字段) +// measItem.indicating_value=item[15];//示值(输出字段,特殊:指针式万用表输入字段) +// measItem.maximum_error=item[10];//最大允许误差(值) +// //measItem.absolute_error=item[11];//绝对误差 +// measItem.resolution=item[9];//分辨力 +// measItem.measure_indication_value=item[19];//被检表示值 +// measureCalList.append(measItem); +// row++; +// } +// } +// } + if(curHeadIdx==idx) + return; + curHeadIdx = idx; + QString sLabel = headTableList.keys()[curHeadIdx]; + const auto &dataRes = caliDataList.value(sLabel); + const auto &headrs = headTableList.value(sLabel); ui->tableWidgetCheck->clearContents(); ui->tableWidgetCheck->setRowCount(0); ui->tableWidgetCheck->setColumnCount(0); - int rowCount = 0; - int row=0; - ui->tableWidgetCheck->setColumnCount(headList.count()); - ui->tableWidgetCheck->setHorizontalHeaderLabels(headList); - for(int i=0;itableWidgetCheck->setColumnCount(headrs.count()); + ui->tableWidgetCheck->setHorizontalHeaderLabels(headrs); + for(int i=0;itableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); } - measureCalList.clear(); - for(int i=0;itableWidget_Point->rowCount();i++){ - Qt::CheckState state = ui->tableWidget_Point->item(i,0)->checkState(); - if(state == Qt::Checked){ - QStringList& item = calibrationList[i]; - int cnt = ui->tableWidget_Point->item(i,2)->text().toInt(); - for(int j=0;jtableWidgetCheck->rowCount(); - ui->tableWidgetCheck->insertRow(rowCount); - ui->tableWidgetCheck->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int k=1;ktableWidgetCheck->setItem(row, k, new QTableWidgetItem(item[k])); - } - SaveDeviceMeasureCalibrator measItem; - measItem.item_data_id = item[1]; - measItem.maximum_error_formula = item[10];//最大允许误差(公式) - measItem.error_param_a = item[11];//误差参数a - measItem.error_param_b = item[12];//误差参数b - measItem.params = item[2];//参数 - measItem.capacity=item[3];//量 - measItem.unit=item[4];//单位 - measItem.frequency=item[5];//频率 - measItem.frequency_unit=item[6];//频率单位 - measItem.range_range=item[7];//量程 - measItem.standard_value=item[8];//标准值(输入字段,特殊:指针式万用表输出字段) - measItem.indicating_value=item[15];//示值(输出字段,特殊:指针式万用表输入字段) - measItem.maximum_error=item[10];//最大允许误差(值) - //measItem.absolute_error=item[11];//绝对误差 - measItem.resolution=item[9];//分辨力 - measItem.measure_indication_value=item[19];//被检表示值 - measureCalList.append(measItem); - row++; - } + //tableWidget->setRowCount(data.count()); + int rowCount = 0; + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = ui->tableWidgetCheck->rowCount(); + ui->tableWidgetCheck->insertRow(rowCount); + ui->tableWidgetCheck->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jtableWidgetCheck->setItem(i, j, new QTableWidgetItem(dataRes[i][j])); } } +} + +void CheckWindow::connectDevice(){ if(connectList.length()>0&&connectList[0].type==0) deviceEngine.openDevice(connectList[0].programInterface.visa,"Visa"); if(connectList.length()>1&&connectList[1].type==1) @@ -659,52 +740,140 @@ return nullptr; } +int CheckWindow::getIndexByHeader(QString sLabel,QString sName){ + const auto &headrs = headTableList.value(sLabel); + for(int i=0;iinstruct_config.split(";"); - if(sList.length()>0){ - for (QString& sCmd : sList){ - standardEngine.sendData(sCmd); - } - } - } - } - //被检设备读数 - if(deviceEngine.getState()){ - InstructionLib *instrcutLib = getCmdByCheckName(0,item.params); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); - if(sList.length()>0){ - for (QString& sCmd : sList){ - deviceEngine.sendData(sCmd); - } - } - Delay_MSec(2000); - sRet = deviceEngine.queryData(instrcutLib->instruct_read); - } - } - // - if(sRet==""){ - bool bOk = false; - double dRet = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + initCheckTable(i); + QString sLabel = headTableList.keys()[i]; + QList dataRes = caliDataList.value(sLabel); - if (bOk) { - sRet = QString::number(dRet); + for (int i = 0; i < dataRes.count(); ++i) { + QString sRet=""; + double dStdValue,dError; + //标准器输出 + int idx= getIndexByHeader(sLabel,"检定项目"); + QString sParam = dataRes[i][idx]; + if(standardEngine.getState()){ + InstructionLib *instrcutLib = getCmdByCheckName(1,sParam); + if(instrcutLib!=nullptr){ + QStringList sList = instrcutLib->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + standardEngine.sendData(sCmd); + qDebug() << "standard cmds:" << sCmd; + } + } + } } + //被检设备读数 + if(deviceEngine.getState()){ + InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); + if(instrcutLib!=nullptr){ + QStringList sList = instrcutLib->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + deviceEngine.sendData(sCmd); + qDebug() << "config cmds:" << sCmd; + } + } + Delay_MSec(2000); + qDebug() << "query cmds:" << instrcutLib->instruct_read; + sRet = deviceEngine.queryData(instrcutLib->instruct_read); + idx= getIndexByHeader(sLabel,"单位"); + dStdValue = transUnit(sRet,dataRes[i][idx]); + } + } + // + if(sRet==""){ + bool bOk = false; + dStdValue = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + + if (bOk) { + sRet = QString::number(dStdValue); + //idx= getIndexByHeader(sLabel,"单位"); + //dStdValue = transUnit(sRet,dataRes[i][idx]); + //sRet = QString::number(dStdValue); + } + } + //item.measure_indication_value = sRet; + if(iEquipType==1){ + idx= getIndexByHeader(sLabel,"示值"); + dataRes[i][idx] = QString::number(dStdValue); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dStdValue))); //示值 + idx= getIndexByHeader(sLabel,"标准值"); + double dTmp = dataRes[i][idx].toDouble(); + dError = dStdValue-dTmp; + idx= getIndexByHeader(sLabel,"绝对误差"); + dataRes[i][idx] = QString::number(dError); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dError))); //示值 + } + //ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); } - item.measure_indication_value = sRet; - ui->tableWidgetCheck->setItem(i,15,new QTableWidgetItem(sRet)); //示值 - ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); + caliDataList.insert(sLabel,dataRes); } +// initCheckTable(); +// for(int i=0;iinstruct_config.split(";"); +// if(sList.length()>0){ +// for (QString& sCmd : sList){ +// standardEngine.sendData(sCmd); +// } +// } +// } +// } +// //被检设备读数 +// if(deviceEngine.getState()){ +// InstructionLib *instrcutLib = getCmdByCheckName(0,item.params); +// if(instrcutLib!=nullptr){ +// QStringList sList = instrcutLib->instruct_config.split(";"); +// if(sList.length()>0){ +// for (QString& sCmd : sList){ +// deviceEngine.sendData(sCmd); +// } +// } +// Delay_MSec(2000); +// sRet = deviceEngine.queryData(instrcutLib->instruct_read); +// } +// } +// // +// if(sRet==""){ +// bool bOk = false; +// double dRet = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); + +// if (bOk) { +// sRet = QString::number(dRet); +// } +// } +// item.measure_indication_value = sRet; +// ui->tableWidgetCheck->setItem(i,15,new QTableWidgetItem(sRet)); //示值 +// ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); +// } } void CheckWindow::Delay_MSec(unsigned int msec) diff --git a/softwareDirectory/AutoVerScheme/checkwindow.h b/softwareDirectory/AutoVerScheme/checkwindow.h index 2655417..99a9d96 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.h +++ b/softwareDirectory/AutoVerScheme/checkwindow.h @@ -68,12 +68,15 @@ void getCheckMethod(); void initDeviceInfo(QString sId); void deleteItem(QLayout *layout); - void initCheckTable(); + void initCheckTable(int idx); InstructionLib* getCmdByCheckName(int idx,QString name); void Delay_MSec(unsigned int msec); void SetHomePaheCombox(Dept task); bool comboBoxContainsItem(QComboBox *comboBox, const QString &itemText); void showStandard(); + void connectDevice(); + int getIndexByHeader(QString sLabel,QString sName); + double transUnit(QString sData,QString sUnit); private: Ui::CheckWindow *ui; QList programList; @@ -90,6 +93,10 @@ QMap> caliDataList; QMap headTableList; QList catDeviceList; + int curHeadIdx=-1; + int iEquipType=1; + QMap unitTransList; + QString standardId; }; #endif // CHECKWINDOW_H diff --git a/softwareDirectory/AutoVerScheme/checkwindow.ui b/softwareDirectory/AutoVerScheme/checkwindow.ui index e27b34e..e81b305 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.ui +++ b/softwareDirectory/AutoVerScheme/checkwindow.ui @@ -1921,6 +1921,9 @@ + + + diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp index b4a2d42..cd2427a 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp @@ -8,7 +8,7 @@ ui(new Ui::DialogCheckResult) { ui->setupUi(this); - + ui->tableWidget->verticalHeader()->setParent(nullptr); } DialogCheckResult::~DialogCheckResult() @@ -16,43 +16,122 @@ delete ui; } -void DialogCheckResult::initCheckTable(QList measList,QStringList headList,QString sID) +void DialogCheckResult::deleteItem(QLayout *layout) { - ui->tableWidget->verticalHeader()->setParent(nullptr); - ui->tableWidget->setColumnCount(headList.count()); - ui->tableWidget->setHorizontalHeaderLabels(headList); - for(int i=0;itableWidget->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); - } - int rowCount=0; - int row=0; - measureCalList = measList; - measHeadList = headList; - stdId = sID; - for (const SaveDeviceMeasureCalibrator& measItem : measList) - { - //获取行号 并进行添加行 - rowCount = ui->tableWidget->rowCount(); - ui->tableWidget->insertRow(rowCount); - //添加 序号 - ui->tableWidget->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); + QLayoutItem *child; + while ((child = layout->takeAt(0)) != nullptr) + { + //setParent为NULL,防止删除之后界面不消失 + if(child->widget()) + { + child->widget()->setParent(nullptr); + delete child->widget(); + } + else if (child->layout()) + { + deleteItem(child->layout()); + child->layout()->deleteLater(); + } + delete child; + } +} +void DialogCheckResult::initCalDataTable(int idx) +{ + if(curHeadIdx==idx) + return; + curHeadIdx = idx; + QString sLabel = headTableList->keys()[curHeadIdx]; + const auto &dataRes = caliDataList->value(sLabel); + const auto &headrs = headTableList->value(sLabel); + ui->tableWidget->clearContents(); + ui->tableWidget->setRowCount(0); + ui->tableWidget->setColumnCount(0); + ui->tableWidget->setColumnCount(headrs.count()); + ui->tableWidget->setHorizontalHeaderLabels(headrs); + for(int i=0;itableWidget->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); + } + //tableWidget->setRowCount(data.count()); + int rowCount = 0; + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = ui->tableWidget->rowCount(); + ui->tableWidget->insertRow(rowCount); + ui->tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jtableWidget->setItem(i, j, new QTableWidgetItem(dataRes[i][j])); + } + } +} - ui->tableWidget->setItem(row, 2, new QTableWidgetItem(measItem.params)); - ui->tableWidget->setItem(row, 3, new QTableWidgetItem(measItem.capacity)); - ui->tableWidget->setItem(row, 4, new QTableWidgetItem(measItem.unit)); - ui->tableWidget->setItem(row, 5, new QTableWidgetItem(measItem.frequency)); - ui->tableWidget->setItem(row, 6, new QTableWidgetItem(measItem.frequency_unit)); - ui->tableWidget->setItem(row, 7, new QTableWidgetItem(measItem.range_range)); - ui->tableWidget->setItem(row, 8, new QTableWidgetItem(measItem.standard_value)); - ui->tableWidget->setItem(row, 9, new QTableWidgetItem(measItem.resolution)); - ui->tableWidget->setItem(row, 10, new QTableWidgetItem(measItem.maximum_error)); - ui->tableWidget->setItem(row, 11, new QTableWidgetItem(measItem.error_param_a)); - ui->tableWidget->setItem(row, 12, new QTableWidgetItem(measItem.error_param_b)); - ui->tableWidget->setItem(row, 15, new QTableWidgetItem(measItem.indicating_value)); - ui->tableWidget->setItem(row, 19, new QTableWidgetItem(measItem.measure_indication_value)); - row++; - } + +void DialogCheckResult::initCheckTable(QMap> *measList,QMap *headList,QString sID) +{ + caliDataList = measList; + headTableList = headList; + stdId = sID; + ui->tableWidget->clearContents(); + ui->tableWidget->setRowCount(0); + deleteItem(ui->HeadListLayout); + int index=0; + for (const auto &item : *headTableList) { + // ======================================================================================== + // 数据循环显示 + // =================================================================================== + QString sLabel = headTableList->keys()[index]; + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(sLabel, this); + //设置样式 + // 设置按钮大小为 56x20 + button->setFixedSize(85, 40); + button->setCheckable(true); + button->setAutoExclusive(true); + //设置第一个按钮选中状态 + if(index==0){ button->setChecked(true);} + //button->setc(true); + // 设置按钮样式表 + button->setStyleSheet("QPushButton {" + "border: 1px solid white;" // 白色边框 + "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 + "background-color: rgba(242, 242, 242, 1);" // 浅灰色背景 + "}" + "QPushButton:hover {" + "background-color: rgba(215, 215, 215, 1);;" // 鼠标悬停时变为深灰色背景 + "}" + "QPushButton:checked {" + "color: white;" + "background-color: rgb(74, 102, 186);" // 选中时变为蓝色背景 + "}"); + + ui->HeadListLayout->addWidget(button); + connect(button, &QPushButton::clicked, this, [this,index]() { + //tackedWidget->setCurrentIndex(index); + initCalDataTable(index); + }); + ++index; + } + ui->HeadListLayout->addStretch(); + initCalDataTable(0); + + QList CliTable = BaseCommonApi::getJudgeCalibrationTable(deviceId); + if(CliTable.length()>0){ + iEquipType = CliTable[0].belong_standard_equipment.toInt(); + } + catoryList = BaseCommonApi::getDeviceMeasureEquipmentCatory(deviceId); +} + +QString DialogCheckResult::getValueByHeader(int idx,QString sLabel,QString sName){ + QList dataRes = caliDataList->value(sLabel); + const auto &headrs = headTableList->value(sLabel); + for(int i=0;ilineEditTemp->text(); measInfo.humidity =ui->lineEdit_Hum->text(); measInfo.measure_address=ui->comboBoxPlace->currentText(); @@ -81,12 +165,40 @@ equipment.create_time=equipment.update_time=QDateTime::currentDateTime(); BaseCommonApi::InsertDeviceMeasureEquipment(equipment); } - - for(SaveDeviceMeasureCalibrator& item:measureCalList){ - item.id = QString::number(api.generateId()); - item.data_id = measInfo.id; - BaseCommonApi::InsertVerMultiCal(item); + for (int k=0;kkeys().length();k++) { + QString sLabel = headTableList->keys()[k]; + const auto &dataRes = caliDataList->value(sLabel); + //tableWidget->setRowCount(data.count()); + if(iEquipType==1){ + for (int i = 0; i < dataRes.count(); ++i) { + SaveDeviceMeasureCalibrator measItem; + measItem.id = QString::number(api.generateId()); + measItem.data_id = measInfo.id; + measItem.item_data_id = getValueByHeader(i,sLabel,"序号"); + measItem.maximum_error_formula = getValueByHeader(i,sLabel,"最大允许误差");//最大允许误差(公式) + //measItem.error_param_a = item[11];//误差参数a + //measItem.error_param_b = item[12];//误差参数b + measItem.params = getValueByHeader(i,sLabel,"检定项目");//参数 + measItem.capacity=getValueByHeader(i,sLabel,"量");//量 + measItem.unit=getValueByHeader(i,sLabel,"单位");//单位 + //measItem.frequency=item[5];//频率 + //measItem.frequency_unit=item[6];//频率单位 + measItem.range_range=getValueByHeader(i,sLabel,"量程");//量程 + measItem.standard_value=getValueByHeader(i,sLabel,"标准值");//标准值(输入字段,特殊:指针式万用表输出字段) + measItem.indicating_value=getValueByHeader(i,sLabel,"示值");//示值(输出字段,特殊:指针式万用表输入字段) + measItem.maximum_error=getValueByHeader(i,sLabel,"最大允许误差");//最大允许误差(值) + measItem.absolute_error=getValueByHeader(i,sLabel,"绝对误差");//绝对误差 + measItem.resolution=getValueByHeader(i,sLabel,"分辨力");//分辨力 + measItem.measure_indication_value=getValueByHeader(i,sLabel,"示值");//被检表示值 + BaseCommonApi::InsertVerMultiCal(measItem); + } + } } +// for(SaveDeviceMeasureCalibrator& item:measureCalList){ +// item.id = QString::number(api.generateId()); +// item.data_id = measInfo.id; +// BaseCommonApi::InsertVerMultiCal(item); +// } QMessageBox::information(this, "提示", "保存成功!"); } else @@ -105,38 +217,72 @@ QStringList conentList; itemList <<"unit"<<"address"<<"jianAddr"<<"time2"<<"temperature"<<"humidity"; conentList <<""<<""<comboBoxPlace->currentText()<dateEditCheck->text()<lineEditTemp->text()<lineEdit_Hum->text(); - engine.setMarks("unit",""); + engine.setMarks("unit",taskList[0].customer_name); engine.setMarks("address",""); + engine.setMarks("name",taskList[0].sample_name); + engine.setMarks("type",taskList[0].sample_model); + engine.setMarks("serial",taskList[0].manufacture_no); + engine.setMarks("factory",taskList[0].manufacturer); engine.setMarks("jianAddr",ui->comboBoxPlace->currentText()); engine.setMarks("time2",ui->dateEditCheck->text()); engine.setMarks("temperature",ui->lineEditTemp->text()); engine.setMarks("humidity",ui->lineEdit_Hum->text()); + QList result = BaseCommonApi::getCatDeviceInfor(stdId); + if(result.length()>0){ + engine.setMarks("stdname",result[0].equipment_name); + engine.setMarks("stdtype",result[0].model); + engine.setMarks("stdno",result[0].manufacture_no); + engine.setMarks("stduncert",""); + engine.setMarks("stdvalid",result[0].measure_valid_date); + } + //engine.setBatchMarks(itemList,conentLis;t) QString strLabel = "result"; //engine.setMarks(strLabel,"1.表格1"); - QString strTitle = "1.表格1"; - int rows = measureCalList.length()+1; - int cols = measHeadList.length(); - QAxObject* pTable = engine.insertTable(strLabel,rows,cols,strTitle); - for (int i=0;ikeys().length()-1;k>=0;k--) { + QString sLabel = headTableList->keys()[k]; + QString strTitle = QString("%1.%2").arg(k+2).arg(sLabel); + const auto &headrs = headTableList->value(sLabel); + const auto &dataRes = caliDataList->value(sLabel); + int rows = dataRes.count()+1; + int cols = headrs.length(); + QAxObject* pTable = engine.insertTable(strLabel,rows,cols,strTitle); + for (int i=0;isetRowCount(data.count()); + for (int i = 0; i < dataRes.count(); ++i) { + engine.setCellString(pTable,i+2,1,QString::number(i+1)); + for(int j=1;j measList,QStringList headList,QString sID); + void initCheckTable(QMap> *measList,QMap *headList,QString sID); private slots: void on_pushButton_3_clicked(); @@ -24,6 +24,10 @@ void on_pushButton_2_clicked(); void on_pushButton_clicked(); +private: + void deleteItem(QLayout *layout); + void initCalDataTable(int idx); + QString getValueByHeader(int idx,QString sLabel,QString sName); public: QList taskList; @@ -32,7 +36,12 @@ Ui::DialogCheckResult *ui; QList measureCalList; QStringList measHeadList; + QMap> *caliDataList; + QMap *headTableList; QString stdId; + int curHeadIdx=-1; + int iEquipType; + QList catoryList; }; #endif // DIALOGCHECKRESULT_H diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.ui b/softwareDirectory/AutoVerScheme/dialogcheckresult.ui index 3be74e6..c8d624f 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.ui +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.ui @@ -6,8 +6,8 @@ 0 0 - 959 - 723 + 1334 + 789 @@ -255,6 +255,9 @@ + + + false diff --git a/softwareDirectory/AutoVerScheme/formaddrsetting.cpp b/softwareDirectory/AutoVerScheme/formaddrsetting.cpp index 11bc88b..4c664e8 100644 --- a/softwareDirectory/AutoVerScheme/formaddrsetting.cpp +++ b/softwareDirectory/AutoVerScheme/formaddrsetting.cpp @@ -141,6 +141,7 @@ if(result.length()>0){ sName = result[0].equipment_name; } + cmd.verification_program_id = sId; cmd.device_id = sId; cmd.device_name = sName; } @@ -149,6 +150,7 @@ if(result.length()>0){ sName = result[0].equipment_name; } + cmd.verification_program_id = sId; cmd.device_id = sId; cmd.device_name = sName; } diff --git a/softwareDirectory/AutoVerScheme/formcheckpoint.cpp b/softwareDirectory/AutoVerScheme/formcheckpoint.cpp index cdc2e22..9b65f53 100644 --- a/softwareDirectory/AutoVerScheme/formcheckpoint.cpp +++ b/softwareDirectory/AutoVerScheme/formcheckpoint.cpp @@ -1,6 +1,8 @@ #include "formcheckpoint.h" #include "ui_formcheckpoint.h" #include "basecommonapi.h" +#include +#include FormCheckPoint::FormCheckPoint(QWidget *parent,QString sId) : QWidget(parent), @@ -21,39 +23,99 @@ void FormCheckPoint::updateTable(QString id) { - //获取核查点tablewight的数据 - QStringList headlist; + //每个检定项目列头 + QMap headListItem; //例 + //每个检定项目数据 + QMap> dataListItem; //例 + dataListItem=BaseCommonApi::Search_CalibrationTableClass(id,&headListItem); + QHBoxLayout *layout = ui->HeadListLayout; + QStackedWidget *stackedWidget = ui->stackedWidgetData; + //数据清空 + // 清空QStackedWidget中的所有页 + while (stackedWidget->count() > 0) { + QWidget *widget = stackedWidget->widget(0); // 获取第一个子部件 + stackedWidget->removeWidget(widget); // 从堆叠部件中移除 + delete widget; // 删除部件,防止内存泄漏 + } + // 清空QHBoxLayout中的所有QPushButton + while (QLayoutItem *item = layout->takeAt(0)) { + QWidget *widget = item->widget(); + if (widget && qobject_cast(widget)) { + // 移除并删除QPushButton + delete widget; + } + } + int index = 0; + for (const auto &item : headListItem) { + QTableWidget *tableWidget = new QTableWidget(this); + tableWidget->setColumnCount(item.count()); + tableWidget->setHorizontalHeaderLabels(item); + for(int i=0;ihorizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); + //设置tableWidget样式表 + tableWidget->verticalHeader()->setParent(nullptr); //隐藏行头 + tableWidget->setStyleSheet("QHeaderView::section {" + "border: 1px solid rgba(197, 196, 196, 1);" + "border-left:none;" + "border-top:none;" + "background-color:white;" + "}"); - QList Data=BaseCommonApi::Search_CalibrationTable(id,&headlist); + // ======================================================================================== + // 数据循环显示 + // ==================================================================================== + int rowCount=0; + const auto &dataRes = dataListItem.value(headListItem.keys()[index]); + //tableWidget->setRowCount(data.count()); - //tableWidgetItem - ui->tableWidget->setRowCount(0); - ui->tableWidget->setColumnCount(headlist.count()); - ui->tableWidget->setHorizontalHeaderLabels(headlist); - ui->tableWidget->verticalHeader()->setParent(nullptr); //隐藏行头 - for(int i=0;itableWidget->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); - } - //循环数据 - int rowCount=0; - int row=0; - for (const QStringList& item : Data) - { - //获取行号 并进行添加行 - rowCount = ui->tableWidget->rowCount(); - ui->tableWidget->insertRow(rowCount); - //添加 序号 - ui->tableWidget->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); - //循环读取值 headlist,count是列的数量 - for(int i=1;itableWidget->setItem(row, i, new QTableWidgetItem(item[i])); - } + for (int i = 0; i < dataRes.count(); ++i) { + //获取行号 并进行添加行 + rowCount = tableWidget->rowCount(); + tableWidget->insertRow(rowCount); + tableWidget->setItem(i, 0, new QTableWidgetItem(QString::number(i+1))); + for(int j=1;jsetItem(i, j, new QTableWidgetItem(dataRes[i][j])); + } - row++; + } - } + stackedWidget->insertWidget(index,tableWidget); + // ======================================================================================== + // 按钮设置显示 + // ==================================================================================== + QPushButton *button = new QPushButton(headListItem.keys()[index], this); + //设置样式 + // 设置按钮大小为 56x20 + button->setFixedSize(85, 40); + button->setCheckable(true); + button->setAutoExclusive(true); + //设置第一个按钮选中状态 + if(index==0){ button->setChecked(true);} + //button->setc(true); + // 设置按钮样式表 + button->setStyleSheet("QPushButton {" + "border: 1px solid white;" // 白色边框 + "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 + "background-color: rgba(242, 242, 242, 1);" // 浅灰色背景 + "}" + "QPushButton:hover {" + "background-color: rgba(215, 215, 215, 1);;" // 鼠标悬停时变为深灰色背景 + "}" + "QPushButton:checked {" + "color: white;" + "background-color: rgb(74, 102, 186);" // 选中时变为蓝色背景 + "}"); + + layout->addWidget(button); + connect(button, &QPushButton::clicked, stackedWidget, [stackedWidget, index]() { + stackedWidget->setCurrentIndex(index); + }); + + ++index; + } + //默认启动第一个页面 + stackedWidget->setCurrentIndex(0); } void FormCheckPoint::on_pushButton_14_clicked() diff --git a/softwareDirectory/AutoVerScheme/formcheckpoint.ui b/softwareDirectory/AutoVerScheme/formcheckpoint.ui index 3a6eb47..a788b31 100644 --- a/softwareDirectory/AutoVerScheme/formcheckpoint.ui +++ b/softwareDirectory/AutoVerScheme/formcheckpoint.ui @@ -95,7 +95,30 @@ - + + + + + + + + Qt::Horizontal + + + + 1506 + 20 + + + + + + + + + + +