#include "checkwindow.h" #include "ui_checkwindow.h" #include "dialogcheckresult.h" #include <QMessageBox> #include "basecommonapi.h" #include <QInputDialog> #include "newcheckmethod.h" #include "formcheckpoint.h" #include "multiinputdialog.h" #include "formgageresult.h" #include "dialogdcstabinput.h" CheckWindow::CheckWindow(QWidget *parent) : QWidget(parent), ui(new Ui::CheckWindow) { ui->setupUi(this); //ui->tableWidgetDevice->setColumnCount(8); //ui->tableWidgetMethod->setColumnCount(7); ui->tableWidgetDevice->verticalHeader()->setParent(nullptr); for(int i=2;i<8;i++) ui->tableWidgetDevice->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); ui->tableWidgetMethod->verticalHeader()->setParent(nullptr); //隐藏行头 for(int i=1;i<5;i++) ui->tableWidgetMethod->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); ui->tableWidgetMethod->setColumnWidth(0, 60); ui->tableWidgetMethod->setColumnWidth(5, 100); ui->tableWidget_3->verticalHeader()->setParent(nullptr); for(int i=0;i<2;i++) ui->tableWidget_3->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); ui->tableWidget_3->setSelectionBehavior(QAbstractItemView::SelectRows); ui->tableWidget_Point->verticalHeader()->setParent(nullptr); ui->tableWidget_Point->setColumnWidth(0, 60); for(int i=1;i<3;i++) ui->tableWidget_Point->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); ui->tableWidget_Standard->verticalHeader()->setParent(nullptr); for(int i=0;i<2;i++) ui->tableWidget_Standard->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); ui->tableWidgetStd->verticalHeader()->setParent(nullptr); //隐藏行头 for(int i=1;i<6;i++) ui->tableWidgetStd->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); ui->tableWidgetStd->setColumnWidth(0, 60); ui->tableWidgetStd->setColumnWidth(7, 120); ui->tableWidgetCheck->verticalHeader()->setParent(nullptr); ui->comboBoxName->addItem("ALL"); ui->comboBoxModal->addItem("ALL"); ui->comboBoxCustomer->addItem("ALL"); ui->comboBoxName_2->addItem("ALL"); ui->comboBoxModal_2->addItem("ALL"); //统一定义单位转换系数 unitTransList=readDataFromFile("unitTrans.txt"); //统一定义命令占位符 cmdPlaceHolderList=readDataFromFile("cmdPlaceHolder.txt"); //单位值特殊转换 unitTypeTransList=readDataFromFile("unitTypeTrans.txt"); //测试结果值填充列 resultfillingList=readDataFromFile("resultfilling.txt"); getCheckDevice(); //ui->stackedWidget_2->setCurrentIndex(1); //ui->tableWidgetDevice->verticalHeader()->sectionResizeMode(QHeaderView::Stretch); //this->grabKeyboard(); setFocusPolicy(Qt::StrongFocus); // this->close(); } CheckWindow::~CheckWindow() { myTaskList.clear(); programList.clear(); connectList.clear(); selectTaskList.clear(); headList.clear(); calibrationList.clear(); measureCalList.clear(); caliDataListAll.clear(); headTableListAll.clear(); closeDevice(); VisaStanEngineList.clear(); delete ui; } void CheckWindow::showMethod() { selectTaskList.clear(); QString ids; for(int i=0;i<ui->tableWidgetDevice->rowCount();i++){ Qt::CheckState state = ui->tableWidgetDevice->item(i,0)->checkState(); if(state == Qt::Checked){ selectTaskList.append(myTaskList[i]); measureInfo.order_id = myTaskList[i].orderId; qDebug()<<measureInfo.order_id; qDebug()<<measureInfo.sample_id; /*if(ids=="") ids = myTaskList[i].id; else ids +=";"+ myTaskList[i].id;*/ //break; } } if(selectTaskList.length()==0){ QMessageBox::warning(this, "提示", "请选择被检设备!"); }else{ //qDebug() << "select ids:" << ids; ui->stackedWidget->setCurrentIndex(1); getCheckMethod(); } } void CheckWindow::updateStandardTable() { QStringList ValueList; ValueList.append("请选择角色"); for (int i=0;i<RoleList.count();i++) { ValueList.append(RoleList[i].role); } ui->tableWidgetStd->clearContents(); ui->tableWidgetStd->setRowCount(0); QString sFilterName = ui->comboBoxName_2->currentText(); QString sFilterModal = ui->comboBoxModal_2->currentText(); QString sFilterDepart = ui->lineEdit_4->text(); QString sFilterNo = ui->lineEditNo_2->text(); //catDeviceList.clear(); catIdList.clear(); if(programInfo.standard_device_id!=""){ catIdList = programInfo.standard_device_id.split(","); int row=0; for(int i=catIdList.length()-1;i>=0; i--) { QString id = catIdList[i]; QString readraleName; QList<CatDeviceInfor> result = BaseCommonApi::getCatDeviceInfor(id); if(result.length()>0){ CatDeviceInfor item = result[0]; bool bAdd=true; if(sFilterName!="ALL"&&!item.equipment_name.contains(sFilterName)){ bAdd=false; } if(sFilterModal!="ALL"&&!item.model.contains(sFilterModal)){ bAdd=false; } if(sFilterDepart!=""&&!item.dept_name.contains(sFilterDepart)){ bAdd=false; } if(sFilterNo!=""&&!item.manufacture_no.contains(sFilterNo)){ bAdd=false; } if(bAdd){ //更新标准设备表格 //rowCount = ui->tableWidgetStd->rowCount(); ui->tableWidgetStd->insertRow(0); QTableWidgetItem* p_check = new QTableWidgetItem(); p_check->setCheckState(Qt::Unchecked); //设置首列为 CheckBox 控件 ui->tableWidgetStd->setItem(0,0,p_check); ui->tableWidgetStd->setItem(0, 1, new QTableWidgetItem(item.equipment_name)); ui->tableWidgetStd->setItem(0, 2, new QTableWidgetItem(item.model)); //设置数据 ui->tableWidgetStd->setItem(0, 3, new QTableWidgetItem(item.manufacture_no)); ui->tableWidgetStd->setItem(0, 4, new QTableWidgetItem(item.dept_name)); ui->tableWidgetStd->setItem(0, 5, new QTableWidgetItem(item.director_name)); ui->tableWidgetStd->setItem(0, 6, new QTableWidgetItem(item.measure_valid_date)); if(RoleList.count()!=0){ QComboBox *comboBox=new QComboBox(); comboBox->addItems(ValueList); ui->tableWidgetStd->setCellWidget(0, 7,comboBox); readraleName=GetdeviceidByRole(id); if(readraleName!=""){ comboBox->setCurrentText(readraleName); } // 连接下拉框的currentIndexChanged信号到槽函数 connect(comboBox, &QComboBox::currentTextChanged, this, [this, id,comboBox,i]() { onComboBoxCurrTextChanged(comboBox->currentText(),id,i); }); }else{ui->tableWidgetStd->setItem(0, 7,new QTableWidgetItem("标准设备"));} //catDeviceList.append(item); }else{ catIdList.removeAt(i); } } result.clear(); row++; } } } void CheckWindow::onComboBoxCurrTextChanged(QString Value,QString device_id,int row) { if(RoleList.count()!=0){ QString cateory_id=DeviceMeasureEquipmentCatorycatory[0].item_category_id; for (int i=0;i<RoleList.count();i++) { if(RoleList[i].device_id==device_id && RoleList[i].role!=Value){ RoleList[i].device_id=""; BaseCommonApi::UpdateDeviceRole(RoleList[i]); } if(RoleList[i].role==Value && RoleList[i].cateory_id==cateory_id) { RoleList[i].device_id=device_id; RoleList[i].device_type=QString::number(1); BaseCommonApi::UpdateDeviceRole(RoleList[i]); } } for(int i=0;i<ui->tableWidgetStd->rowCount();i++){ QComboBox *comboBox = qobject_cast<QComboBox *>(ui->tableWidgetStd->cellWidget(i, 7)); if (comboBox) { QString str=comboBox->currentText(); if(comboBox->currentText()==Value && i!=row){ comboBox->setCurrentIndex(0); } } } } } QString CheckWindow::GetdeviceidByRole(QString device_id) { QString cateory_id=DeviceMeasureEquipmentCatorycatory[0].item_category_id; QString temprole=""; for(int i=0;i<RoleList.count();i++) { if(cateory_id==RoleList[i].cateory_id && RoleList[i].device_id==device_id) { temprole= RoleList[i].role; break; } } return temprole; } void CheckWindow::showStandard(){ QString sId=""; for(int i=0;i<ui->tableWidgetMethod->rowCount();i++){ Qt::CheckState state = ui->tableWidgetMethod->item(i,0)->checkState(); if(state == Qt::Checked){ sId = programList[i].id; break; } } if(programList.count()==1) { sId = programList[0].id; } if(sId==""){ QMessageBox::warning(this, "提示", "请选择检定程序!"); }else{ programInfo = BaseCommonApi::getVerificationProgramInfo(sId); //catDeviceList.clear(); if(programInfo.standard_device_id!=""){ QStringList idList = programInfo.standard_device_id.split(","); for(const QString& id : idList) { QList<CatDeviceInfor> result = BaseCommonApi::getCatDeviceInfor(id); if(result.length()>0){ SetStandardCombox(result[0]); //catDeviceList.append(result[0]); } result.clear(); } idList.clear(); ui->comboBoxName_2->setCurrentIndex(0); ui->comboBoxModal_2->setCurrentIndex(0); ui->lineEditNo_2->setText(""); ui->lineEdit_4->setText(""); //获取检定项分类 及 检定项分类包含的角色 DeviceMeasureEquipmentCatorycatory = BaseCommonApi::getDeviceMeasureEquipmentCatory(selectTaskList[0].sample_id); RoleList=BaseCommonApi::getDeviceRoleBydeviceId(DeviceMeasureEquipmentCatorycatory[0].item_category_id); updateStandardTable(); } //查询角色表信息 getDeviceRoleBydeviceId //catory[0].item_category_id 检定项目ID ui->stackedWidget->setCurrentIndex(2); } } void CheckWindow::showDevice() { //QStringList idList = programInfo.standard_device_id.split(","); QString sId=""; StandarIdList.clear(); /*for(int i=0;i<ui->tableWidgetStd->rowCount();i++){ Qt::CheckState state = ui->tableWidgetStd->item(i,0)->checkState(); if(state == Qt::Checked){ sId = catIdList[i]; break; } }*/ for(int i=0;i<ui->tableWidgetStd->rowCount();i++){ Qt::CheckState state = ui->tableWidgetStd->item(i,0)->checkState(); if(state == Qt::Checked){ StandarIdList.append(catIdList[i]); } } if(catIdList.count()==1) { StandarIdList.append(catIdList[0]); } if(StandarIdList.count()==0){ QMessageBox::warning(this, "提示", "请选择标准设备!"); }else{ //programInfo = BaseCommonApi::getVerificationProgramInfo(sId); initDeviceInfo(StandarIdList); ui->stackedWidget->setCurrentIndex(3); } } void CheckWindow::initDeviceInfo(QList<QString> sId) { StandarIdList = sId; QString strStyle = QString("QLabel{image:url(%1);}").arg(programInfo.img_path); qDebug() << "strStyle:" << strStyle; ui->label_8->setStyleSheet(strStyle); ui->tableWidget_3->clearContents(); ui->tableWidget_3->setRowCount(0); ui->tableWidget_Standard->clearContents(); ui->tableWidget_Standard->setRowCount(0); QStringList idList; int rowCount=0; int row=0; connectList.clear(); if(selectTaskList.length()>0) { QList<DeviceMeasureEquipmentCatory> catory = DeviceMeasureEquipmentCatorycatory; if(catory.length() > 0 ){ ui->lineEdit_category->setText(catory[0].item_category_name); } //idList = programInfo.tested_device_id.split(","); for(const Dept& task : selectTaskList) { ConnectInfo info; info.id = task.sample_id; info.type = 0; info.state="未连接"; info.deviceName = task.sample_name; QList<VerificationProgramConfigInterface> addrList = BaseCommonApi::getVerificationProgramConfigInterface(info.id); if(addrList.length()>0){ info.programInterface = addrList[0]; } info.cmdList = BaseCommonApi::getInstructionLib(programInfo.id); info.rolenName="被检设备"; connectList.append(info); addrList.clear(); } idList.clear(); } if(StandarIdList.count()!=0){ idList =StandarIdList; for(const QString& id : idList) { //if(id!=CheckId) // continue; ConnectInfo info; info.id = id; info.type = 1; info.state="未连接"; if(idList.count()==1) info.rolenName="标准设备"; else info.rolenName=GetdeviceidByRole(id); QList<CatDeviceInfor> result = BaseCommonApi::getCatDeviceInfor(id); if(result.length()>0){ info.deviceName = result[0].equipment_name; //更新标准设备表格 rowCount = ui->tableWidget_Standard->rowCount(); ui->tableWidget_Standard->insertRow(rowCount); ui->tableWidget_Standard->setItem(row, 0, new QTableWidgetItem(info.rolenName)); ui->tableWidget_Standard->setItem(row, 1, new QTableWidgetItem(info.deviceName)); ui->tableWidget_Standard->setItem(row, 2, new QTableWidgetItem("OFF")); //设置数据 row++; } result.clear(); QList<VerificationProgramConfigInterface> addrList = BaseCommonApi::getVerificationProgramConfigInterface(id); if(addrList.length()>0){ info.programInterface = addrList[0]; } info.cmdList = BaseCommonApi::getInstructionLib(id); connectList.append(info); addrList.clear(); } idList.clear(); } rowCount=0; row=0; for(const ConnectInfo& info : connectList){ rowCount = ui->tableWidget_3->rowCount(); ui->tableWidget_3->insertRow(rowCount); ui->tableWidget_3->setItem(row, 0, new QTableWidgetItem(info.rolenName)); ui->tableWidget_3->setItem(row, 1, new QTableWidgetItem(info.deviceName)); ui->tableWidget_3->setItem(row, 2, new QTableWidgetItem(info.state)); //设置数据 row++; } //搜索仪器地址放入下拉框 ui->comboBox_visa->clear(); QStringList visaAddrs = engine.getVisaAddrs(); ui->comboBox_visa->addItems(visaAddrs); ui->tableWidget_3->selectRow(0); connect(ui->comboBox_visa,&QComboBox::currentTextChanged,this,&CheckWindow::on_comboBox_visa_OnCurrentTextChanged); } void CheckWindow::showCheck() { deleteItem(ui->horizontalLayout_14); int idx=0; curDevciceIdx=-1; curDeviceId = ""; caliDataListAll.clear(); headTableListAll.clear(); for (const Dept& task : selectTaskList) { QMap<QString, QStringList> header; QMap<QString, QList<QStringList>> data = BaseCommonApi::Search_CalibrationTableClass(task.sample_id,&header); caliDataListAll.append(data); headTableListAll.append(header); QPushButton *btn_1 = new QPushButton(); btn_1->setText(task.sample_name); btn_1->setStyleSheet("QPushButton{" "background-color:rgb(240,240,240);" "color:rgb(51,51,51);" "}"); //btn_1->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed); QFont font; font.setPointSize(12);//字体大小 font.setBold(true); btn_1->setFont(font); btn_1->setCursor(Qt::PointingHandCursor); connect(btn_1, &QPushButton::clicked, this, [this,idx]() { on_deviceButton_clicked(idx); }); ui->horizontalLayout_14->addWidget(btn_1); idx++; } ui->horizontalLayout_14->addStretch(); on_deviceButton_clicked(0); ui->stackedWidget_2->setCurrentIndex(1); } void CheckWindow::changeDevice(int idx){ if(idx>=0&&idx<selectTaskList.length()) { //QStringList idList=programInfo.tested_device_id.split(","); QString deviceId = selectTaskList[idx].sample_id; if(deviceId==curDeviceId) return; curDeviceId = deviceId; QList<JudgeCalibrationTable> CliTable = BaseCommonApi::getJudgeCalibrationTable(curDeviceId); if(CliTable.length()>0){ iEquipType = CliTable[0].belong_standard_equipment.toInt(); } //QStringList headlist; pageButtons.clear(); headList.clear(); //calibrationList.clear(); //headTableList.clear(); chList.clear(); //calibrationList =BaseCommonApi::Search_CalibrationTable(deviceId,&headList); //caliDataList = BaseCommonApi::Search_CalibrationTableClass(deviceId,&headTableList); caliDataList = &caliDataListAll[idx]; headTableList = &headTableListAll[idx]; if(caliDataList->count()<1){ QMessageBox::warning(this, "提示", "此检定项未开发或此设备无检测点"); return; }; //tableWidgetItem QList<QStringList> calData = caliDataList->values().first(); gaugeInfo = BaseCommonApi::searchStatus(curDeviceId); ui->tableWidget_Point->clearContents(); ui->tableWidget_Point->setRowCount(0); deleteItem(ui->HeadListLayout); //循环数据 int rowCount=0; int row=0; // for (const QStringList& item : calibrationList) // { // //获取行号 并进行添加行 // rowCount = ui->tableWidget_Point->rowCount(); // ui->tableWidget_Point->insertRow(rowCount); // QTableWidgetItem* p_check = new QTableWidgetItem(); // p_check->setCheckState(Qt::Unchecked); //设置首列为 CheckBox 控件 // ui->tableWidget_Point->setItem(row,0,p_check); // ui->tableWidget_Point->setItem(row, 1, new QTableWidgetItem(item[8])); // ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1")); // row++; // } int index=0; curHeadIdx=-1; for (const auto &item : *headTableList) { // ======================================================================================== // 数据循环显示 // =================================================================================== QString sLabel = headTableList->keys()[index]; const auto &dataRes = caliDataList->value(sLabel); //tableWidget->setRowCount(data.count()); for (int i = 0; i < dataRes.count(); ++i) { //获取行号 并进行添加行 rowCount = ui->tableWidget_Point->rowCount(); ui->tableWidget_Point->insertRow(rowCount); int idx= getIndexByHeader(sLabel,QStrTranQStrList("检定项目")); int idx2= getIndexByHeader(sLabel,QStrTranQStrList("标准值")); int idx3= getIndexByHeader(sLabel,QStrTranQStrList("单位")); int chname= getIndexByHeader(sLabel,QStrTranQStrList("通道")); if(idx==-1){idx=1;};if(idx2==-1){idx2=5;};if(idx3==-1){idx3=4;}; ui->tableWidget_Point->setItem(row, 0, new QTableWidgetItem(dataRes[i][idx])); ui->tableWidget_Point->setItem(row, 1, new QTableWidgetItem(dataRes[i][idx2]+"("+dataRes[i][idx3]+")")); ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1")); row++; if(chname!=-1&&!chList.contains(dataRes[i][chname])) { chList.append(dataRes[i][chname]); } } // ======================================================================================== // 按钮设置显示 // ==================================================================================== 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);" // 浅灰色背景 "height:40px;" "padding:5px;" "}" "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); }); pageButtons.append(button); ++index; } QStringList info; if(gaugeInfo.length()>0) info = gaugeInfo[0]; ui->HeadListLayout->addStretch(); if(iEquipType==4){ ui->pushButton_next->show(); QLabel* label = new QLabel(this); label->setText("单位:"); ui->HeadListLayout->addWidget(label); QLineEdit* edit1 = new QLineEdit(this); edit1->setFixedWidth(100); edit1->setText(info.at(6)); ui->HeadListLayout->addWidget(edit1); QLabel* label2 = new QLabel(this); label2->setText("检定介质"); ui->HeadListLayout->addWidget(label2); QComboBox* combox = new QComboBox(this); combox->addItem(info.at(7)); // combox->addItem("变压器油"); // combox->addItem("空气"); // combox->addItem("水"); // combox->addItem("其他"); ui->HeadListLayout->addWidget(combox); QLabel* label3 = new QLabel(this); label3->setText("分度值的1/5:"); ui->HeadListLayout->addWidget(label3); QLineEdit* edit = new QLineEdit(this); edit->setFixedWidth(100); edit->setText(info.at(8)); ui->HeadListLayout->addWidget(edit); QPushButton *button = new QPushButton("生成结果处理", this); button->setStyleSheet("QPushButton {" "color: white;" "background-color: rgba(0, 128, 254, 1);" "}"); connect(button, &QPushButton::clicked, this, [this]() { //tackedWidget->setCurrentIndex(index); openGageResult(); }); ui->HeadListLayout->addWidget(button); }else{ ui->pushButton_next->hide(); } if(iEquipType==5){ CreateCharts(); ui->groupBoxChart->show(); timerChart = new QTimer(this); connect(timerChart,SIGNAL(timeout()),this,SLOT(RefreshTime_Slot())); //timerChart->start(2000); }else{ ui->groupBoxChart->hide(); } } std::sort(chList.begin(), chList.end()); if(chList.count()==0){chList.append("CH1");}; initCheckTable(0); } void CheckWindow::openGageResult(){ //QList<QStringList> calData = caliDataList.values().first(); FormGageResult *checkWindow = new FormGageResult(nullptr,selectTaskList[0].sample_id); //checkWindow->setWindowState(Qt::WindowMaximized); checkWindow->setWindowModality(Qt::ApplicationModal); checkWindow->show(); } void CheckWindow::on_deviceButton_clicked(int idx) { if(curDevciceIdx == idx||idx<0||idx>=selectTaskList.length()) return; curDevciceIdx = idx; for(int i=0;i<selectTaskList.length();i++){ QLayoutItem *child = ui->horizontalLayout_14->itemAt(i); QPushButton *btn_1 = qobject_cast<QPushButton *>(child->widget()); if(i==idx){ btn_1->setStyleSheet("QPushButton{" "background-color:rgb(55,83,123);" "color:rgb(255,255,255);" "}"); }else{ btn_1->setStyleSheet("QPushButton{" "background-color:rgb(240,240,240);" "color:rgb(51,51,51);" "}"); } } ui->label_21->setText(QString("设备名称: %1").arg(selectTaskList[curDevciceIdx].sample_name)); ui->label_22->setText(QString("型号规格: %1").arg(selectTaskList[curDevciceIdx].sample_model)); ui->label_23->setText(QString("出厂编号: %1").arg(selectTaskList[curDevciceIdx].manufacture_no)); ui->label_24->setText(QString("生产厂家: %1").arg(selectTaskList[curDevciceIdx].manufacturer)); changeDevice(idx); } void CheckWindow::deleteItem(QLayout *layout) { 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 CheckWindow::showMethodWidget() { if(iEquipType==5){ if(timerChart->isActive()) timerChart->stop(); } ui->stackedWidget_2->setCurrentIndex(0); ui->stackedWidget->setCurrentIndex(0); getCheckDevice(); } void CheckWindow::showResult() { DialogCheckResult* dlg = new DialogCheckResult; dlg->taskList =selectTaskList; //dlg->deviceId = selectTaskList[0].sample_id; dlg->initCheckTable(caliDataListAll,headTableListAll,StandarIdList); dlg->setModal(true); dlg->show(); } void CheckWindow::SetHomePaheCombox(Dept task) { if(comboBoxContainsItem(ui->comboBoxName,task.sample_name)){ ui->comboBoxName->addItem(task.sample_name); } if(comboBoxContainsItem(ui->comboBoxModal,task.sample_model)){ ui->comboBoxModal->addItem(task.sample_model); } if(comboBoxContainsItem(ui->comboBoxCustomer,task.customer_name)){ ui->comboBoxCustomer->addItem(task.customer_name); } } void CheckWindow::SetStandardCombox(CatDeviceInfor info) { if(comboBoxContainsItem(ui->comboBoxName_2,info.equipment_name)){ ui->comboBoxName_2->addItem(info.equipment_name); } if(comboBoxContainsItem(ui->comboBoxModal_2,info.model)){ ui->comboBoxModal_2->addItem(info.model); } } bool CheckWindow::comboBoxContainsItem(QComboBox *comboBox, const QString &itemText) { for (int i = 0; i < comboBox->count(); ++i) { if (comboBox->itemText(i) == itemText) { return false; // 找到匹配项,返回 true } } return true; // 没有找到匹配项,返回 false } void CheckWindow::getCheckDevice(bool bInit) { myTaskList.clear(); ui->tableWidgetDevice->clearContents(); ui->tableWidgetDevice->setRowCount(0); //模拟用户ID QString userId="1695282436182188034"; //myTaskList = BaseCommonApi::getMyTasks(userId,"3"); myTaskList = BaseCommonApi::getAllData(); if(bInit){ for (int i=0;i<myTaskList.length();i++){ if(myTaskList[i].measure_status=="3") SetHomePaheCombox(myTaskList[i]); } ui->comboBoxName->setCurrentIndex(0); ui->comboBoxModal->setCurrentIndex(0); ui->comboBoxCustomer->setCurrentIndex(0); ui->lineEditNo->setText(""); } QString sFilterName = ui->comboBoxName->currentText(); QString sFilterModal = ui->comboBoxModal->currentText(); QString sFilterCustomer = ui->comboBoxCustomer->currentText(); QString sFilterNo = ui->lineEditNo->text(); for (int i=myTaskList.length()-1;i>=0;i--){ bool bAdd=true; if(sFilterName!="ALL"&&myTaskList[i].sample_name!=sFilterName){ bAdd=false; } if(sFilterModal!="ALL"&&myTaskList[i].sample_model!=sFilterModal){ bAdd=false; } if(sFilterCustomer!="ALL"&&myTaskList[i].customer_name!=sFilterCustomer){ bAdd=false; } if(sFilterNo!=""&&!myTaskList[i].manufacture_no.contains(sFilterNo)){ bAdd=false; } if(!bAdd||myTaskList[i].measure_status!="3"){ myTaskList.removeAt(i); } } int rowCount = 0; int row=0; QString State; for (const Dept& myTask : myTaskList) { rowCount = ui->tableWidgetDevice->rowCount(); ui->tableWidgetDevice->insertRow(rowCount); QTableWidgetItem* p_check = new QTableWidgetItem(); p_check->setCheckState(Qt::Unchecked); //设置首列为 CheckBox 控件 ui->tableWidgetDevice->setItem(row,0,p_check); ui->tableWidgetDevice->setItem(row, 1, new QTableWidgetItem(QString::number(row+1))); //ui->tableWidget->setItem(row, 0, new QTableWidgetItem(dept.id)); ui->tableWidgetDevice->setItem(row, 2, new QTableWidgetItem(myTask.sample_name)); //设置数据 ui->tableWidgetDevice->setItem(row, 3, new QTableWidgetItem(myTask.sample_model)); //设置数据 ui->tableWidgetDevice->setItem(row, 4, new QTableWidgetItem(myTask.help_instruction)); //设置数据 ui->tableWidgetDevice->setItem(row, 5, new QTableWidgetItem(myTask.manufacture_no)); //设置数据 ui->tableWidgetDevice->setItem(row, 6, new QTableWidgetItem(myTask.manufacturer)); //设置数据 ui->tableWidgetDevice->setItem(row, 7, new QTableWidgetItem(myTask.customer_name)); //设置数据 row++; } } void CheckWindow::getCheckMethod() { programList.clear(); ui->tableWidgetMethod->clearContents(); ui->tableWidgetMethod->setRowCount(0); //programList = BaseCommonApi::getVerificationProgramInfoMain(); programList = BaseCommonApi::getVerificationProgramInfoByDeviceId(selectTaskList[0].sample_id); QString sFilterName = ui->lineEditName->text(); QString sFilterUser = ui->lineEditCreator->text(); for(int i=programList.length()-1;i>=0;i--){ bool bAdd=true; if(sFilterName!=""&&!programList[i].program_name.contains(sFilterName)){ bAdd=false; } if(sFilterUser!=""&&!programList[i].create_name.contains(sFilterUser)){ bAdd=false; } if(!bAdd){ programList.removeAt(i); } } int rowCount = 0; int row=0; for (const VerificationProgramInfo& program : programList) { rowCount = ui->tableWidgetMethod->rowCount(); ui->tableWidgetMethod->insertRow(rowCount); QTableWidgetItem* p_check = new QTableWidgetItem(); //p_check->setCheckState(Qt::Checked); //设置首列为 CheckBox 控件 p_check->setCheckState(Qt::Unchecked); ui->tableWidgetMethod->setItem(row,0,p_check); ui->tableWidgetMethod->setItem(row, 1, new QTableWidgetItem(program.program_name)); //设置数据 ui->tableWidgetMethod->setItem(row, 2, new QTableWidgetItem(program.create_name)); //设置数据 ui->tableWidgetMethod->setItem(row, 3, new QTableWidgetItem(program.create_time.toString())); //设置数据 ui->tableWidgetMethod->setItem(row, 4, new QTableWidgetItem(program.remark)); //设置数据 QPushButton *btn_1 = new QPushButton(); btn_1->setText(tr("详情")); btn_1->setStyleSheet("QPushButton{" "background-color:rgba(255,255,255,0);" "color:rgba(0,0,255,100);" "text-decoration:underline;" "}"); btn_1->setCursor(Qt::PointingHandCursor); connect(btn_1,SIGNAL(clicked()),this,SLOT(on_editButton_clicked())); btn_1->setIconSize(QSize(16,16)); btn_1->setIcon(QIcon(":/image/Index/u2324.svg")); QWidget *tmp_widget = new QWidget(); QHBoxLayout *tmp_layout = new QHBoxLayout(tmp_widget); tmp_layout->addWidget(btn_1); tmp_layout->setMargin(0); ui->tableWidgetMethod->setCellWidget(row,5,tmp_widget); row++; } } void CheckWindow::on_editButton_clicked() { QPushButton *pushButton_ = dynamic_cast<QPushButton*>(this->sender()); if(NULL == pushButton_) { return; } // 获取按钮的x坐标和y坐标 int x = pushButton_->parentWidget()->frameGeometry().x(); int y = pushButton_->parentWidget()->frameGeometry().y(); // 根据按钮的x和y坐标来定位对应的单元格 QModelIndex index = ui->tableWidgetMethod->indexAt(QPoint(x, y)); // 获取该按钮所在表格的行号和列号 int editIdx = index.row(); //int column = index.column(); QString sId = programList[editIdx].id; NewCheckMethod* checkWindow = new NewCheckMethod(nullptr,sId,false); //checkWindow->checkManageWnd=this; checkWindow->setWindowState(Qt::WindowMaximized); checkWindow->setWindowModality(Qt::ApplicationModal); checkWindow->show(); } void CheckWindow::on_tableWidgetDevice_cellChanged(int row, int column) { } void CheckWindow::on_tableWidgetMethod_cellChanged(int row, int column) { Qt::CheckState state = ui->tableWidgetMethod->item(row,0)->checkState(); if(state == Qt::Checked) { for(int i=0;i<ui->tableWidgetMethod->rowCount();i++){ if(i!=row) { ui->tableWidgetMethod->item(i,0)->setCheckState(Qt::Unchecked); } } } } void CheckWindow::on_pushButton_9_clicked() { //showDevice(); showStandard(); } void CheckWindow::on_tableWidget_3_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn) { if(currentRow>=0&¤tRow<connectList.length()){ currConnectIdx = currentRow; ConnectInfo info= connectList[currentRow]; VerificationProgramConfigInterface addr = info.programInterface; if(addr.communication_type == "SerialPort") ui->radioButton_serial->setChecked(true); else ui->radioButton_visa->setChecked(true); ui->comboBox_visa->setCurrentText(addr.visa); if(addr.serial_port!=""){ QStringList sList = addr.serial_port.split(";"); if(sList.length()==5){ ui->comboBox_port->setCurrentText(sList[0]); ui->comboBox_baurt->setCurrentText(sList[1]); ui->comboBox_check->setCurrentText(sList[2]); ui->comboBox_data->setCurrentText(sList[3]); ui->comboBox_stop->setCurrentText(sList[4]); } } //修改连接状态 if(getJoinState(addr.visa)) { ui->tableWidget_3->setItem(currentRow,2,new QTableWidgetItem("已连接")); }else{ ui->tableWidget_3->setItem(currentRow,2,new QTableWidgetItem("未连接"));} } } 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;i<headList.count();i++) // { // ui->tableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); // } // measureCalList.clear(); // for(int i=0;i<ui->tableWidget_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;j<cnt;j++){ // rowCount = ui->tableWidgetCheck->rowCount(); // ui->tableWidgetCheck->insertRow(rowCount); // ui->tableWidgetCheck->setItem(row, 0, new QTableWidgetItem(QString::number(row+1))); // //循环读取值 headlist,count是列的数量 // for(int k=1;k<headList.count();k++) // { // ui->tableWidgetCheck->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||headTableList->keys().count()==0) return; pageButtons[idx]->setChecked(true); 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); ui->tableWidgetCheck->setColumnCount(headrs.count()); ui->tableWidgetCheck->setHorizontalHeaderLabels(headrs); for(int i=0;i<headrs.count();i++) { ui->tableWidgetCheck->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); } //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;j<dataRes[i].count();j++) { if(headrs[j]=="轻敲前示值-正"||headrs[j]=="轻敲前示值-反"||headrs[j]=="轻敲后示值-正"||headrs[j]=="轻敲后示值-反"){ QLineEdit *label = new QLineEdit(); label->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred); label->setText(dataRes[i][j]); label->setStyleSheet("QLineEdit{border-with:0;border-style:outset}"); connect(label, &QLineEdit::textChanged, this, [this]() { //double dVal = label->text().toDouble(); //label->setText(QString::number(dVal-1)); gageDataChange(); }); QPushButton *btn_1 = new QPushButton(); btn_1->setText(tr("-")); btn_1->setFont(QFont( "Timers",12,QFont::Bold)); // btn_1->setStyleSheet("QPushButton{" // "background-color:rgba(255,255,255,0);" // "color:rgba(92,170,54,100);" // "text-decoration:underline;" // "}"); btn_1->setCursor(Qt::PointingHandCursor); btn_1->setFixedWidth(24); btn_1->setFlat(true); //connect(btn_1,SIGNAL(clicked()),this,SLOT(on_editButton_clicked())); connect(btn_1, &QPushButton::clicked, this, [this]() { //double dVal = label->text().toDouble(); //label->setText(QString::number(dVal-1)); addGageData(false); }); QPushButton *btn_2 = new QPushButton(); btn_2->setText(tr("+")); btn_2->setFont(QFont( "Timers",12,QFont::Bold)); // btn_2->setStyleSheet("QPushButton{" // "background-color:rgba(255,255,255,0);" // "color:rgba(170,17,17,100);" // "text-decoration:underline;" // "}"); btn_2->setCursor(Qt::PointingHandCursor); btn_2->setFixedWidth(24); btn_2->setFlat(true); //connect(btn_2,SIGNAL(clicked()),this,SLOT(on_deleteButton_clicked())); connect(btn_2, &QPushButton::clicked, this, [this]() { //double dVal = label->text().toDouble(); //label->setText(QString::number(dVal+1)); addGageData(); }); // btn_2->setIconSize(QSize(16,16)); // btn_2->setIcon(QIcon(":/image/Index/u2325.svg")); QWidget *tmp_widget = new QWidget(); QHBoxLayout *tmp_layout = new QHBoxLayout(tmp_widget); tmp_layout->addWidget(btn_1,0); tmp_layout->addWidget(label,2); tmp_layout->addWidget(btn_2,0); tmp_layout->setMargin(0); ui->tableWidgetCheck->setCellWidget(i,j,tmp_widget); }else ui->tableWidgetCheck->setItem(i, j, new QTableWidgetItem(dataRes[i][j])); if(dataRes[i][1] == "DCV" || dataRes[i][1] == "DCI"){ ui->tableWidgetCheck->hideColumn(10); ui->tableWidgetCheck->hideColumn(11); }else if (dataRes[i][1] == "ACV" || dataRes[i][1] == "ACI") { ui->tableWidgetCheck->hideColumn(12); ui->tableWidgetCheck->hideColumn(13); }else if (dataRes[i][1] == "R") { ui->tableWidgetCheck->hideColumn(11); ui->tableWidgetCheck->hideColumn(12); } } } if(iEquipType==4&&nextGageIndex!=-1){ if(isBack){ ui->tableWidgetCheck->item(nextGageIndex, 0)->setSelected(true); ui->tableWidgetCheck->cellWidget(nextGageIndex,3)->setStyleSheet("color:white;background-color:rgb(1,10,128);"); ui->tableWidgetCheck->cellWidget(nextGageIndex,5)->setStyleSheet("color:white;background-color:rgb(1,10,128);"); }else{ ui->tableWidgetCheck->item(nextGageIndex, 0)->setSelected(true); ui->tableWidgetCheck->cellWidget(nextGageIndex,2)->setStyleSheet("color:white;background-color:rgb(1,10,128);"); ui->tableWidgetCheck->cellWidget(nextGageIndex,4)->setStyleSheet("color:white;background-color:rgb(1,10,128);"); } } if(iEquipType==5){ if(sLabel=="波动性测试"){ for(int i=0;i<ui->tableWidgetCheck->rowCount()/8;i++){ ui->tableWidgetCheck->setSpan(i*8,1,8,2); QString sLimit; if(dataRes[i*8][1]!="") sLimit = dataRes[i*8][1]; else sLimit = dataRes[i*8][2]; ui->tableWidgetCheck->item(i*8,1)->setText(sLimit); ui->tableWidgetCheck->setSpan(i*8,3,8,1); ui->tableWidgetCheck->setSpan(i*8,19,8,1); ui->tableWidgetCheck->setSpan(i*8,20,8,1); ui->tableWidgetCheck->setSpan(i*8,21,8,1); } }else if(sLabel=="均匀性测试"){ for(int i=0;i<ui->tableWidgetCheck->rowCount()/8;i++){ ui->tableWidgetCheck->setSpan(i*8,1,8,2); QString sLimit; if(dataRes[i*8][1]!="") sLimit = dataRes[i*8][1]; else sLimit = dataRes[i*8][2]; ui->tableWidgetCheck->item(i*8,1)->setText(sLimit); ui->tableWidgetCheck->setSpan(i*8,3,8,1); ui->tableWidgetCheck->setSpan(i*8,15,8,1); ui->tableWidgetCheck->setSpan(i*8,16,8,1); ui->tableWidgetCheck->setSpan(i*8,17,8,1); ui->tableWidgetCheck->setSpan(i*8,18,8,1); } } } } //压力测试 数据表格同步 计算改变 void CheckWindow::gageDataChange(){ QLineEdit *pushButton_ = dynamic_cast<QLineEdit*>(this->sender()); if(NULL == pushButton_) { return; } //qDebug() << pushButton_->text(); // 获取按钮的x坐标和y坐标 int x = pushButton_->parentWidget()->frameGeometry().x(); int y = pushButton_->parentWidget()->frameGeometry().y(); // 根据按钮的x和y坐标来定位对应的单元格 QModelIndex index = ui->tableWidgetCheck->indexAt(QPoint(x, y)); // 获取该按钮所在表格的行号和列号 int row = index.row(); int col = index.column(); QString sLabel = headTableList->keys()[curHeadIdx]; QList<QStringList> dataRes = caliDataList->value(sLabel); dataRes[row][col] = pushButton_->text(); double dVal,dVal2; if(col==2||col==4){ QLayoutItem *child = ui->tableWidgetCheck->cellWidget(row,2)->layout()->itemAt(1); QLineEdit* editCtrl = qobject_cast<QLineEdit *>(child->widget()); QLayoutItem *child2 = ui->tableWidgetCheck->cellWidget(row,4)->layout()->itemAt(1); QLineEdit* editCtrl2 = qobject_cast<QLineEdit *>(child2->widget()); if(editCtrl!=nullptr&&editCtrl2!=nullptr){ dVal = editCtrl->text().toDouble(); dVal2 = editCtrl2->text().toDouble(); //qDebug() << dVal <<";" << dVal2; ui->tableWidgetCheck->setItem(row,6,new QTableWidgetItem(QString::number(dVal2-dVal))); dataRes[row][6] = QString::number(dVal2-dVal); } }else if(col==3||col==5){ QLayoutItem *child = ui->tableWidgetCheck->cellWidget(row,3)->layout()->itemAt(1); QLineEdit* editCtrl = qobject_cast<QLineEdit *>(child->widget()); QLayoutItem *child2 = ui->tableWidgetCheck->cellWidget(row,5)->layout()->itemAt(1); QLineEdit* editCtrl2 = qobject_cast<QLineEdit *>(child2->widget()); if(editCtrl!=nullptr&&editCtrl2!=nullptr){ dVal = editCtrl->text().toDouble(); dVal2 = editCtrl2->text().toDouble(); ui->tableWidgetCheck->setItem(row,7,new QTableWidgetItem(QString::number(dVal2-dVal))); dataRes[row][7] = QString::number(dVal2-dVal); } } caliDataList->insert(sLabel,dataRes); } void CheckWindow::stepGageCheck() { QBrush brush; QTableWidgetItem *currentItem; if (ui->tableWidgetCheck->rowCount() > 0) { if (!isBack) { for (int i = 0; i < ui->tableWidgetCheck->rowCount(); ++i) { QTableWidgetItem *item = ui->tableWidgetCheck->item(i, 0); if (item->isSelected()) { lastSelectedIndex = i; break; } } // if (lastSelectedIndex == -1) { // lastSelectedIndex = 0; // } nextGageIndex = (lastSelectedIndex + 1) % ui->tableWidgetCheck->rowCount(); if(lastSelectedIndex == ui-> tableWidgetCheck->rowCount() - 1 ){ nextGageIndex = (lastSelectedIndex) % ui->tableWidgetCheck->rowCount(); } BaseCommonApi::SaveLogInfo(1,QString("标准器输出")); QString sParam,newCmd; constsLable = headTableList->keys()[curHeadIdx]; QList<QStringList> dataRes = caliDataList->value(constsLable); int idx= getIndexByHeader(constsLable,QStrTranQStrList("检定项目")); if(idx!=-1) sParam = dataRes[nextGageIndex][idx]; else sParam = constsLable; //示值误差/回程误差/轻敲位移 InstructionLib *instrcutLib = getCmdByCheckName(1,sParam); constDataRes= dataRes[nextGageIndex]; SendDevice(instrcutLib,&standardEngine); /*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){ newCmd = transCmd(sCmd,constsLable,dataRes[nextGageIndex],true); if(newCmd!=""){ standardEngine.sendData(newCmd); qDebug() << "standard cmds:" << newCmd; } } } } }*/ currentItem = ui->tableWidgetCheck->item(nextGageIndex, 0); currentItem->setSelected(true); //brush = QBrush(Qt::green); ui->tableWidgetCheck->cellWidget(nextGageIndex,2)->setStyleSheet("color:white;background-color:rgb(1,10,128);"); ui->tableWidgetCheck->cellWidget(nextGageIndex,4)->setStyleSheet("color:white;background-color:rgb(1,10,128);"); //currentItem->setBackground(brush); if (lastSelectedIndex != -1) { QTableWidgetItem *previousItem = ui->tableWidgetCheck->item(lastSelectedIndex, 0); previousItem->setSelected(false); ui->tableWidgetCheck->cellWidget(lastSelectedIndex,2)->setStyleSheet(""); ui->tableWidgetCheck->cellWidget(lastSelectedIndex,4)->setStyleSheet(""); // previousItem->setBackground(Qt::NoBrush); } if(lastSelectedIndex == ui->tableWidgetCheck->rowCount() - 1){ isBack =!isBack; currentItem = ui->tableWidgetCheck->item(nextGageIndex, 0); currentItem->setSelected(true); ui->tableWidgetCheck->cellWidget(nextGageIndex,3)->setStyleSheet("color:white;background-color:rgb(1,10,128);"); ui->tableWidgetCheck->cellWidget(nextGageIndex,5)->setStyleSheet("color:white;background-color:rgb(1,10,128);"); } } else { for (int i = ui->tableWidgetCheck->rowCount() - 1; i >= 0; --i) { QTableWidgetItem *item = ui->tableWidgetCheck->item(i, 0); if (item->isSelected()) { lastSelectedIndex = i; break; } } if (lastSelectedIndex == -1) { lastSelectedIndex = ui->tableWidgetCheck->rowCount() - 1; } nextGageIndex = (lastSelectedIndex == 0) ? ui->tableWidgetCheck->rowCount() - 1 : lastSelectedIndex - 1; BaseCommonApi::SaveLogInfo(1,QString("标准器输出")); QString sParam,newCmd; constsLable = headTableList->keys()[curHeadIdx]; QList<QStringList> dataRes = caliDataList->value(constsLable); int idx= getIndexByHeader(constsLable,QStrTranQStrList("检定项目")); if(idx!=-1) sParam = dataRes[nextGageIndex][idx]; else sParam = constsLable; //示值误差/回程误差/轻敲位移 InstructionLib *instrcutLib = getCmdByCheckName(1,sParam); constDataRes= dataRes[nextGageIndex]; SendDevice(instrcutLib,&standardEngine); /*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){ newCmd = transCmd(sCmd,sLabel,dataRes[nextGageIndex],true); if(newCmd!=""){ standardEngine.sendData(newCmd); qDebug() << "standard cmds:" << newCmd; } } } } }*/ currentItem = ui->tableWidgetCheck->item(nextGageIndex, 0); currentItem->setSelected(true); ui->tableWidgetCheck->cellWidget(nextGageIndex,3)->setStyleSheet("color:white;background-color:rgb(1,10,128);"); ui->tableWidgetCheck->cellWidget(nextGageIndex,5)->setStyleSheet("color:white;background-color:rgb(1,10,128);"); //brush = QBrush(Qt::blue); //currentItem->setBackground(brush); // 取消之前选中项的选中状态 if (lastSelectedIndex != -1) { QTableWidgetItem *previousItem = ui->tableWidgetCheck->item(lastSelectedIndex, 0); previousItem->setSelected(false); ui->tableWidgetCheck->cellWidget(lastSelectedIndex,3)->setStyleSheet(""); ui->tableWidgetCheck->cellWidget(lastSelectedIndex,5)->setStyleSheet(""); // previousItem->setBackground(Qt::NoBrush); } if(lastSelectedIndex == 1){ isBack = !isBack; ui->pushButton_start->setEnabled(true); ui->pushButton_next->setEnabled(false); closeDevice(); nextGageIndex=-1; } } ui->tableWidgetCheck->scrollToItem(currentItem); } } //下一步 void CheckWindow::on_pushButton_next_clicked() { stepGageCheck(); } //压力测试 用于控制数据是增加还是减少 void CheckWindow::addGageData(bool bAdd){ QPushButton *pushButton_ = dynamic_cast<QPushButton*>(this->sender()); if(NULL == pushButton_) { return; } // 获取按钮的x坐标和y坐标 int x = pushButton_->parentWidget()->frameGeometry().x(); int y = pushButton_->parentWidget()->frameGeometry().y(); // 根据按钮的x和y坐标来定位对应的单元格 QModelIndex index = ui->tableWidgetCheck->indexAt(QPoint(x, y)); // 获取该按钮所在表格的行号和列号 int row = index.row(); int col = index.column(); QLayoutItem *child = pushButton_->parentWidget()->layout()->itemAt(1); QLineEdit* editCtrl = qobject_cast<QLineEdit *>(child->widget()); double dStep=1; if(gaugeInfo.length()>0) dStep = gaugeInfo[0].at(8).toDouble(); if(editCtrl!=nullptr){ double dVal = editCtrl->text().toDouble(); if(bAdd) dVal+=dStep; else dVal-=dStep; editCtrl->setText(QString::number(dVal)); } if(col==2||col==3){ QLayoutItem *child = ui->tableWidgetCheck->cellWidget(row,col+2)->layout()->itemAt(1); QLineEdit* editCtrl = qobject_cast<QLineEdit *>(child->widget()); if(editCtrl!=nullptr){ double dVal = editCtrl->text().toDouble(); if(bAdd) dVal+=dStep; else dVal-=dStep; editCtrl->setText(QString::number(dVal)); } } } void CheckWindow::InItcmd(){ //发送INIt相关指令 int count=0; for(const ConnectInfo &visa:connectList) { VisaCommonEngine *Engine; InstructionLib *instrcutLib; if(connectList.length()>0&&visa.type==0) { instrcutLib = getCmdByCheckName(count,"INIT"); Engine=&deviceEngine; } if(connectList.length()>1&&visa.type==1) { instrcutLib = getCmdByCheckName(count,"INIT"); if(connectList.count()==1){ Engine=&standardEngine; }else{ int stancount=0; for (VisaCommonEngine &item:VisaStanEngineList) { if(stancount==count-1){ Engine=&item; break; } } } } SendDevice(instrcutLib,Engine); count++; } } void CheckWindow::connectDevice(){ int count=0; QString rolename; for(const ConnectInfo &visa:connectList) { VisaCommonEngine Engine; if(Engine.openDevice(visa.programInterface.visa,"Visa")){ if(connectList.length()>0&&visa.type==0) { deviceEngine=Engine; } if(connectList.length()>1&&visa.type==1) { if(connectList.count()==2){ standardEngine=Engine; }else{ rolename=this->GetdeviceidByRole(visa.programInterface.device_id); VisaStanEngineList.insert(rolename,Engine); } } } count++; } } void CheckWindow::closeCmd(){ //发送Close相关指令 int count=0; for(const ConnectInfo &visa:connectList) { VisaCommonEngine *Engine; InstructionLib *instrcutLib; if(connectList.length()>0&&visa.type==0) { instrcutLib = getCmdByCheckName(count,"CLOSE"); Engine=&deviceEngine; } if(connectList.length()>1&&visa.type==1) { instrcutLib = getCmdByCheckName(count,"CLOSE"); if(connectList.count()==1){ Engine=&standardEngine; }else{ int stancount=0; for (VisaCommonEngine &item:VisaStanEngineList) { if(stancount==count-1){ Engine=&item; break; } } } } SendDevice(instrcutLib,Engine); } } void CheckWindow::closeDevice(){ //关闭设备连接 int count=0; for(const ConnectInfo &visa:connectList) { VisaCommonEngine *Engine; if(connectList.length()>0&&visa.type==0) { Engine=&deviceEngine; } if(connectList.length()>1&&visa.type==1) { if(connectList.count()==1){ Engine=&standardEngine; }else{ int stancount=0; for (VisaCommonEngine &item:VisaStanEngineList) { if(stancount==count-1){ Engine=&item; break; } } } } Engine->closeDevice(); count++; } } InstructionLib* CheckWindow::getCmdByRoleName(QString RoleName,QString name){ for (ConnectInfo& info : connectList) { if(info.rolenName==RoleName){ for (InstructionLib& item : info.cmdList) { if(item.belong_vername==name) return &item; } } } return nullptr; } VisaCommonEngine CheckWindow::getVisaCommbyRoleName(QString RoleName){ VisaCommonEngine visa; for(VisaCommonEngine &item : VisaStanEngineList){ if(item.role==RoleName){ return item; } } return visa; } InstructionLib* CheckWindow::getCmdByCheckName(int idx,QString name) { if(idx>=0&&idx<connectList.length()){ for (InstructionLib& item : connectList[idx].cmdList) { if(item.belong_vername==name) return &item; } } return nullptr; } int CheckWindow::getIndexByHeader(QString sLabel,QStringList sName){ const auto &headrs = headTableList->value(sLabel); for(int j=0;j<sName.count();j++) { for(int i=0;i<headrs.length();i++){ if(headrs[i]==sName[j]) return i; } } return -1; } QStringList CheckWindow::getsParambyHeader(QString sParam) { QStringList temp; for(const QStringList &key: resultfillingList.keys()){ for(int i=0;i<key.count();i++) { if(sParam==key[i]) { temp=resultfillingList.value(key); return temp; } } } return temp; } double CheckWindow::transUnit(QString sData,QString sUnit,bool reverse){ double dTmp = sData.toDouble(); QString unit = sUnit.toUpper(); QStringList TempValue; for(const QStringList &key : unitTransList.keys()) { for (int i=0;i<key.count();i++) { if(key[i]==unit){ if(reverse) { dTmp/=unitTransList.value(key)[0].toDouble(); return dTmp; }else { dTmp*=unitTransList.value(key)[0].toDouble(); return dTmp; } } } } return dTmp; } double CheckWindow::tranunitSplit(QString sData,bool reverse) { QRegularExpression re("(?=.*[0-9])(?=.*[a-zA-ZΩΜΩ])"); if(re.match(sData).hasMatch()) { QString sData2=sData; QString sNewData,sUnit; ItemUnitSplit(sData,sNewData,sUnit); return transUnit(sNewData,sUnit,reverse); }else{ return sData.toDouble(); } } QString CheckWindow::TranTypeUnit(QString sUnit) { QString NewsUnit=sUnit; if(unitTypeTransList.keys()[0].contains(sUnit)) { NewsUnit=unitTypeTransList.value(unitTypeTransList.keys()[0])[0]; } return NewsUnit; } QString CheckWindow::TranDecimals(QString sLabel,QStringList data,double TestValue,QString ColName) { QStringList ValueList; if(ColName==NULL){ ValueList.append("标准值"); ValueList.append("标准器示值"); ValueList.append("标称值"); }else{ ValueList.append(ColName); } int dex=getIndexByHeader(sLabel,ValueList); if(dex==-1) return QString::number(TestValue); QString StanValue=Removeunit(data[dex]); int decimalPlaces = 0; int decimalPos = StanValue.indexOf('.'); if (decimalPos == -1) { decimalPlaces=1; }else{ decimalPlaces=StanValue.length() - decimalPos - 1; } QString formattedTestValue = QString::number(TestValue, 'f', decimalPlaces); return formattedTestValue; } QString CheckWindow::transCmd(QString sCmd,QString sLabel,QStringList data,bool devicetype) { QString sNewCmd = sCmd; if(sNewCmd.contains("{DELAY:")){ QRegExp re("DELAY:(\\d+)"); int delay=0; if (re.indexIn(sNewCmd) != -1) { delay= re.cap(1).toUInt(); } BaseCommonApi::SaveLogInfo(1,QString("延迟 %1 ms").arg(delay)); qDebug() << "delay time:" << delay; Delay_MSec(delay); return ""; } QString NewUnit; QStringList cmdPlaceHolderValue; QStringList TemporaryValue; for (QStringList keyList : cmdPlaceHolderList.keys()) { if(sCmd.contains(keyList[0])){ cmdPlaceHolderValue=cmdPlaceHolderList.value(keyList); int idx= getIndexByHeader(sLabel,cmdPlaceHolderList.value(keyList)); if(idx!=-1){ if(devicetype || keyList[0]=="{CH}") { NewUnit = TranTypeUnit(data[idx]); //转换 Ω->OHM sNewCmd = sNewCmd.replace(keyList[0],NewUnit); continue; } double dTmp; QRegularExpression re("(?=.*[0-9])(?=.*[a-zA-ZΩΜΩ])"); if(re.match(data[idx]).hasMatch()) { dTmp = tranunitSplit(data[idx],true); }else { TemporaryValue.append("单位"); int idx2= getIndexByHeader(sLabel,TemporaryValue); if(idx2!=-1) { QString unit = data[idx2]; dTmp = transUnit(data[idx],unit,true); }else{ dTmp=data[idx].toDouble(); }; } sNewCmd = sNewCmd.replace(keyList[0],QString::number(dTmp)); } } } return sNewCmd; } //_text void CheckWindow::on_pushButton_start_clicked() { Teststate=SyncRunStatus::Running; if(headTableList->keys().count()==0) return; BaseCommonApi::SaveLogInfo(1,QString("-----------------------------------")); if(iEquipType==13) { //connectDevice(); this->Oscilloscopetextflow(); return; } else if(iEquipType==4){ isBack=false; nextGageIndex=-1; lastSelectedIndex=-1; ui->pushButton_next->setEnabled(true); ui->pushButton_start->setEnabled(false); for (int i = 0; i < ui->tableWidgetCheck->rowCount(); ++i) { QTableWidgetItem *item = ui->tableWidgetCheck->item(i, 0); item->setSelected(false); ui->tableWidgetCheck->cellWidget(i,2)->setStyleSheet(""); ui->tableWidgetCheck->cellWidget(i,4)->setStyleSheet(""); ui->tableWidgetCheck->cellWidget(i,3)->setStyleSheet(""); ui->tableWidgetCheck->cellWidget(i,5)->setStyleSheet(""); } connectDevice(); stepGageCheck(); return; } else if(iEquipType==5){ //timerChart->start(5000); connectDevice(); if(deviceEngine.getState()){ NumberCount=0; timerChart->start(5000); }else{ QMessageBox::warning(this, "警告", "设备未连接!"); } return; }else if(iEquipType==10){ //信号源采集读数 标准器 this->SignalGeneratortextflow(); return; } connectDevice(); for(int i=0;i<headTableList->keys().length();i++) { if(Teststate==SyncRunStatus::Stopped){break;}; //每次循环按钮变化 initCheckTable(i); constsLable= headTableList->keys()[i]; QList<QStringList> dataRes = caliDataList->value(constsLable); BaseCommonApi::SaveLogInfo(1,QString("开始 %1 测试").arg(constsLable)); for (int i = 0; i < dataRes.count(); ++i) { if(Teststate==SyncRunStatus::Stopped){break;}; constDataRes=dataRes[i]; InItcmd(); QString sRet=""; QString newCmd; double dStdValue=FP_INFINITE,dError=0; QString newdStdValue,newdError; //标准器输出 BaseCommonApi::SaveLogInfo(1,QString("标准器输出")); QString sParam; QStringList TempValue; TempValue.append("检定项目"); int idx= getIndexByHeader(constsLable,TempValue); if(idx!=-1) sParam = dataRes[i][idx]; CheckBackColorUpdate(true,i); //暂时加到这个地方 后面统一编写 if(sParam=="DCI"||sParam=="ACI") { int idx2= getIndexByHeader(constsLable,QStrTranQStrList("单位")); if(idx2!=-1) { QString ConstUnit=""; QString v=dataRes[i][idx2].toUpper(); if(i!=0) ConstUnit=dataRes[i-1][idx2].toUpper(); BaseCommonApi::SaveLogInfo(1,ConstUnit+"-"+v); if((ConstUnit=="MA" && v=="A") || (ConstUnit=="A" && v=="MA")) { if(!this->showDialog("电流换线提醒",QString("换线提醒\n %1 -> %2").arg(ConstUnit).arg(v))) { continue; } } } } if(iEquipType==2){ BaseCommonApi::SaveLogInfo(1,QString("可编程交流电源输出")); VisaCommonEngine engineRole=getVisaCommbyRoleName("可编程交流电源"); //角色 InstructionLib *instrcutLibRole=getCmdByRoleName("可编程交流电源",constsLable); SendDevice(instrcutLibRole,&engineRole); BaseCommonApi::SaveLogInfo(1,QString("被检电源输出")); InstructionLib *instrcutLib = getCmdByCheckName(0,constsLable); SendDevice(instrcutLib,&deviceEngine); BaseCommonApi::SaveLogInfo(1,QString("电子负载")); engineRole=getVisaCommbyRoleName("电子负载"); //角色 instrcutLibRole=getCmdByRoleName("电子负载",constsLable); SendDevice(instrcutLibRole,&engineRole); } else { InstructionLib *instrcutLibstan = getCmdByCheckName(1,sParam); SendDevice(instrcutLibstan,&standardEngine,true); //被检设备读数 BaseCommonApi::SaveLogInfo(1,QString("被检设备输出")); InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); SendDevice(instrcutLib,&deviceEngine); //在被检设备读数前 if(iEquipType==10){ if(sParam=="功率"){ //功率开始测试前进行校准 InstructionLib *PowerPage=getCmdByCheckName(1,"功率界面切换"); InstructionLib *PowerCali=getCmdByCheckName(1,"功率校准"); InstructionLib *PowerDevice=getCmdByCheckName(1,constsLable); QStringList ReadCmd=PowerCali->instruct_read.split(';'); for(int i=0;i<ReadCmd.count();i++){ } } } sRet=ReadDevice(instrcutLib,&deviceEngine); if(sRet!=""){ TempValue.clear(); TempValue.append("单位"); idx= getIndexByHeader(constsLable,TempValue); dStdValue = transUnit(sRet,dataRes[i][idx]); } } autoAdujstData(constsLable,i,dStdValue,dataRes); CheckBackColorUpdate(false,i); closeCmd(); CheckBackColorUpdate(false,i); Delay_MSec(2000); } caliDataList->insert(constsLable,dataRes); } closeDevice(); } void CheckWindow::autoAdujstData(QString sLabel,int i,double dStdValue,QList<QStringList>& dataRes){ double dError; QString newdStdValue,newdError,Value; if(iEquipType==1 || iEquipType==13 ){ if(dStdValue==FP_INFINITE){ bool bOk = false; dStdValue = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,5,&bOk); if (bOk) { //sRet = QString::number(dStdValue); }else{ dStdValue=0; } } // ItemUnitSplit //newdStdValue= TranDecimals(sLabel, dataRes[i],dStdValue); newdStdValue=QString::number(dStdValue,'f',4); //QStringList ResultName=getsParambyHeader(sParam); int idx= getIndexByHeader(sLabel,QStrTranQStrList("示值")); if(idx!=-1) { dataRes[i][idx] = newdStdValue; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue)); //示值 } idx= getIndexByHeader(sLabel,QStrTranQStrList("绝对误差")); if(idx!=-1) { int idx2=getIndexByHeader(sLabel,QStrTranQStrList(("标准值"))); if(idx2==-1) idx2=getIndexByHeader(sLabel,QStrTranQStrList("标称值")); if(idx2!=-1){ double dTmp = dataRes[i][idx2].toDouble(); dError = dStdValue-dTmp; newdError=TranDecimals(sLabel,dataRes[i],dError); dataRes[i][idx] = newdError; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); } } idx= getIndexByHeader(sLabel,QStrTranQStrList("测量值")); if(idx!=-1) { dataRes[i][idx] = newdStdValue; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue)); //测量值 if(sLabel=="校准信号"){ int topidx= getIndexByHeader(constsLable,QStrTranQStrList("顶部测量值")); int bomidx= getIndexByHeader(constsLable,QStrTranQStrList("底部测量值")); ui->tableWidgetCheck->setItem(i,topidx,new QTableWidgetItem(dataRes[i][topidx])); //测量值 ui->tableWidgetCheck->setItem(i,bomidx,new QTableWidgetItem(dataRes[i][bomidx])); //测量值 } } idx= getIndexByHeader(sLabel,QStrTranQStrList(("相对误差"))); if(idx!=-1) { int idx2=getIndexByHeader(sLabel,QStrTranQStrList(("标准值"))); if(idx2==-1) idx2=getIndexByHeader(sLabel,QStrTranQStrList("标称值")); if(idx2!=-1){ double dTmp = dataRes[i][idx2].toDouble(); dError = (dStdValue-dTmp); newdError=TranDecimals(sLabel,dataRes[i],dError); dataRes[i][idx] = newdError; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); } } idx= getIndexByHeader(sLabel,QStrTranQStrList(("结论"))); if(idx!=-1) { dataRes[i][idx] = "符合指标"; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem("符合指标")); //测量值 } if(sLabel=="频带宽度"){ idx= getIndexByHeader(sLabel,QStrTranQStrList("测量幅度")); if(idx!=-1) { QString textValue= ui->tableWidgetCheck->item(i,idx)->text(); if(textValue==""){ dataRes[i][idx] = newdStdValue; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue)); //测试 }else { idx= getIndexByHeader(sLabel,QStrTranQStrList("参考幅度")); QString refvalue= newdStdValue; dataRes[i][idx] = refvalue; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(refvalue)); //参考 // 计算a除以b的对数(以10为底) double logResult = std::log10( refvalue.toDouble() / textValue.toDouble()); double result = 20 * logResult; idx= getIndexByHeader(sLabel,QStrTranQStrList(("分贝数(dB)"))); if(idx!=-1) { QString newresult; newresult=TranDecimals(sLabel, dataRes[i],result); dataRes[i][idx] = newresult; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newresult)); //分贝数 } } } } if(sLabel=="时基"){ idx= getIndexByHeader(sLabel,QStrTranQStrList(("周期时标信号"))); if(idx!=-1) { double ErrorCal; QString sign=""; if(dStdValue>0.2){sign="-";}; bool bOk = false; dStdValue = QInputDialog::getDouble(this,"手动输入","请输入△T/ns值",0,-100000, 100000,5,&bOk); if (bOk) { }else{ dStdValue=0; } dStdValue=transUnit(QString::number(dStdValue),"ns",true); ErrorCal=std::fabs(dStdValue); idx= getIndexByHeader(sLabel,QStrTranQStrList(("时基绝对误差△T/ns"))); if(idx!=-1){ dataRes[i][idx] =sign+QString::number(ErrorCal); ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(sign+QString::number(ErrorCal))); //测量值 } idx= getIndexByHeader(sLabel,QStrTranQStrList(("时基相对误差△δ"))); { dataRes[i][idx] =sign+QString::number(ErrorCal/0.01); ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(sign+QString::number(ErrorCal/0.01))); //测量值 } } } BaseCommonApi::SaveLogInfo(1,QString("转换前 测试值 %1").arg(dStdValue)); BaseCommonApi::SaveLogInfo(1,QString("转换后 测试值 %1").arg(newdStdValue)); //Delay_MSec(2000); } else if(iEquipType==2){ // if(qIsFinite(dStdValue)){ // bool bOk = false; // dStdValue = QInputDialog::getDouble(this,"手动测试","请输入测量值",0,-100000, 100000,5,&bOk); // if (bOk) { // //sRet = QString::number(dStdValue); // }else{ // dStdValue=0; // } // } QString sTips= "请调节电压和电流至额定状态后,点击测量。"; if(sLabel=="电源电压调整率") sTips = "请调节电压和电流至额定状态后,点击测量。"; else if(sLabel=="负载调整率"){ int idx =getIndexByHeader(sLabel,QStrTranQStrList(("负载情况"))); if(dataRes[i][idx]=="满载") sTips="请调节仪器至满载状态后,点击测量。"; else sTips="请调节仪器至空载状态后,点击测量。"; }else if(sLabel=="电压示值误差"){ int idx =getIndexByHeader(sLabel,QStrTranQStrList(("被检表示值"))); int idx2 =getIndexByHeader(sLabel,QStrTranQStrList(("单位"))); sTips = QString("调节输出至额定电压%1%2,并测量被检电源的实际电压,记录到蓝色区域。").arg(dataRes[i][idx]).arg(dataRes[i][idx2]); }else if(sLabel=="电流示值误差(直接测量)"){ int idx =getIndexByHeader(sLabel,QStrTranQStrList(("被检表示值"))); int idx2 =getIndexByHeader(sLabel,QStrTranQStrList(("单位"))); sTips = QString("请调节仪器至%1%2额定电流状态,且电流接线状态正确后,点击测量按钮。").arg(dataRes[i][idx]).arg(dataRes[i][idx2]); } DialogDCStabInput dlg(this,sLabel,sTips); dlg.dataRes = &dataRes[i]; stabInputdlg = &dlg; connect(&dlg,SIGNAL(readData(QString)),this,SLOT(readDCStabData(QString))); dlg.setModal(true); if(dlg.exec()==QDialog::Accepted){ dStdValue = dlg.getInputData(); } if(sLabel=="电压示值误差"||sLabel=="电流示值误差(直接测量)"){ newdStdValue= TranDecimals(sLabel,dataRes[i],dStdValue); int idx= getIndexByHeader(sLabel,QStrTranQStrList(("标准值"))); if(idx!=-1) { dataRes[i][idx] = newdStdValue; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue)); } idx= getIndexByHeader(sLabel,QStrTranQStrList(("绝对误差"))); if(idx!=-1) { int idx2=getIndexByHeader(sLabel,QStrTranQStrList(("被检表示值"))); double dTmp = dataRes[i][idx2].toDouble(); dError = dTmp-dStdValue; newdError=TranDecimals(sLabel,dataRes[i],dError); dataRes[i][idx] = newdError; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); } } else if(sLabel=="电流示值误差(间接测量)"){ newdStdValue= TranDecimals(sLabel,dataRes[i],dStdValue); int idx= getIndexByHeader(sLabel,QStrTranQStrList(("标准电压值"))); if(idx!=-1) { dataRes[i][idx] = newdStdValue; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue)); } idx= getIndexByHeader(sLabel,QStrTranQStrList(("标准值"))); if(idx!=-1) { int idx2=getIndexByHeader(sLabel,QStrTranQStrList(("标准电阻值"))); double dTmp = dataRes[i][idx2].toDouble(); dError = dStdValue/dTmp;//计算电流 newdError=TranDecimals(sLabel,dataRes[i],dError); dataRes[i][idx] = newdError; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); idx2=getIndexByHeader(sLabel,QStrTranQStrList(("被检表示值"))); dTmp = dataRes[i][idx2].toDouble(); idx= getIndexByHeader(sLabel,QStrTranQStrList(("绝对误差"))); dError = dTmp-dError; newdError=TranDecimals(sLabel,dataRes[i],dError); dataRes[i][idx] = newdError; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); } } else if(sLabel=="电源电压调整率"){ newdStdValue= TranDecimals(sLabel,dataRes[i],dStdValue); int idx= getIndexByHeader(sLabel,QStrTranQStrList("被检电源输出电压值")); if(idx!=-1) { dataRes[i][idx] = newdStdValue; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue)); } if((i+1)%3==0){ int idx2=getIndexByHeader(sLabel,QStrTranQStrList("调压器输出值")); double dMin=0,dMax=0,dMid=0; QList<QStringList> outList; for(int k=i-2;k<=i;k++){ QStringList item = dataRes[k]; outList.append(item); } std::sort(outList.begin(),outList.end(),[idx2](const QStringList &outA,const QStringList &outB){return outA[idx2].toDouble()<outB[idx2].toDouble();}); dMid = outList[1][idx2].toDouble(); dMax = outList[2][idx].toDouble(); dMin = outList[0][idx].toDouble(); outList.clear(); idx= getIndexByHeader(sLabel,QStrTranQStrList("被检电源输出电压最大差值")); if(idx!=-1) { dError = abs(dMax-dMin); newdError=TranDecimals(sLabel,dataRes[i],dError); dataRes[i][idx] = newdError; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); idx= getIndexByHeader(sLabel,QStrTranQStrList("电源电压调整率")); if(idx!=-1){ dError = dError/dMid; newdError=TranDecimals(sLabel,dataRes[i],dError)+"%"; dataRes[i][idx] = newdError; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); } } } } else if(sLabel=="负载调整率"){ newdStdValue= TranDecimals(sLabel,dataRes[i],dStdValue); int idx= getIndexByHeader(sLabel,QStrTranQStrList("被检电源输出电压值")); if(idx!=-1) { dataRes[i][idx] = newdStdValue; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue)); } if((i+1)%2==0){ double dFull=dataRes[i-1][5].toDouble(),dEmpty=dStdValue; if(dataRes[i-1][4]=="满载"){ dFull=dataRes[i-1][5].toDouble(); dEmpty=dStdValue; }else{ dFull = dStdValue; dEmpty=dataRes[i-1][5].toDouble(); } // for(QStringList item:dataRes){ // if(item[4]=="满载"){ // dFull = item[5].toDouble(); // }else if(item[4]=="空载"){ // dEmpty = item[5].toDouble(); // } // } idx= getIndexByHeader(sLabel,QStrTranQStrList("电压差值")); if(idx!=-1) { dError = abs(dFull-dEmpty); newdError=TranDecimals(sLabel,dataRes[i],dError); dataRes[i][idx] = newdError; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); idx= getIndexByHeader(sLabel,QStrTranQStrList("负载调整率")); if(idx!=-1){ dError = dError/dEmpty; newdError=TranDecimals(sLabel,dataRes[i],dError)+"%"; dataRes[i][idx] = newdError; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); } } } } else if(sLabel=="纹波电压"){ newdStdValue= TranDecimals(sLabel,dataRes[i],dStdValue); int idx= getIndexByHeader(sLabel,QStrTranQStrList(("纹波电压"))); if(idx!=-1) { dataRes[i][idx] = newdStdValue; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue)); } } else if(sLabel=="输出电压短期稳定性"){ newdStdValue= TranDecimals(sLabel,dataRes[i],dStdValue); int idx= getIndexByHeader(sLabel,QStrTranQStrList(("被测电源输出电压"))); if(idx!=-1) { dataRes[i][idx] = newdStdValue; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue)); } double dMin=0,dMax=0,dBase=1; int cnt=0; for(QStringList item:dataRes){ if(item[idx]!=""){ if(cnt==0){ dMin = dMax= dBase = item[idx].toDouble(); }else{ dMin = qMin(dMin,item[idx].toDouble()); dMax = qMax(dMax,item[idx].toDouble()); } } } idx= getIndexByHeader(sLabel,QStrTranQStrList("输出电压最大变化值")); if(idx!=-1){ dError = dMax-dMin; newdError=TranDecimals(sLabel,dataRes[i],dError); dataRes[i][idx] = newdError; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); idx= getIndexByHeader(sLabel,QStrTranQStrList("短期稳定性")); dError = dError/dBase; newdError=TranDecimals(sLabel,dataRes[i],dError)+"%"; dataRes[i][idx] = newdError; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); } } } else if(iEquipType==4){ if(qIsFinite(dStdValue)){ MultiInputDialog dlg(4); QStringList titles ; titles << "轻敲前示值-正" <<"轻敲前示值-反"<< "轻敲后示值-正" << "轻敲后示值-反"; dlg.setWindowTitle("输入测试值"); dlg.resize(400,400); dlg.SetLabelTexts(titles); dlg.setModal(true); if(dlg.exec()==QDialog::Accepted){ QList<double> results = dlg.GetAllTexts(); int k=0; for(QString title:titles){ newdStdValue= TranDecimals(sLabel,dataRes[i],results[k]); int idx= getIndexByHeader(sLabel,QStrTranQStrList((title))); dataRes[i][idx] = newdStdValue; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue)); //示值 k++; BaseCommonApi::SaveLogInfo(1,QString("测试项目: %1 测试值: %2").arg(title).arg(newdStdValue)); } int idx= getIndexByHeader(sLabel,QStrTranQStrList("轻敲前后变动量-正")); if(idx!=-1){ newdError= TranDecimals(sLabel,dataRes[i],results[2]-results[0]); dataRes[i][idx] = newdError; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); } idx= getIndexByHeader(sLabel,QStrTranQStrList("轻敲前后变动量-反")); if(idx!=-1){ newdError= TranDecimals(sLabel,dataRes[i],results[3]-results[1]); dataRes[i][idx] = newdError; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); } } } }else if(iEquipType==9) { QStringList heads; QString data,unit; if(sLabel=="中频带宽转换偏差"||sLabel=="平均噪声电平"||sLabel=="谐波失真"||sLabel=="1db增益压缩点"){ unit = "dBm"; }else if(sLabel=="输入频响"||sLabel=="输入衰减"){ int idx= getIndexByHeader(constsLable,QStrTranQStrList("指标下限")); QString value=dataRes[i][idx]; ItemUnitSplit(value,data,unit); }else{ int idx= getIndexByHeader(constsLable,QStrTranQStrList("标称值")); QString value=dataRes[i][idx]; ItemUnitSplit(value,data,unit); } if(sLabel=="中频带宽"||sLabel=="扫频宽度"){ heads <<"fl1"<<"fr1"<<"fl2"<<"fr2"<<"fl3"<<"fr3"; }else if(sLabel=="中频带宽转换偏差"||sLabel=="平均噪声电平"||sLabel=="1db增益压缩点"){ heads <<"测量值"; }else if(sLabel=="参考电平"||sLabel=="垂直刻度"){ heads <<"信号源幅度"; } else if(sLabel=="频率显示"||sLabel=="输入频响"||sLabel=="输入衰减"||sLabel=="校准信号"){ heads <<"测量值1"<<"测量值2"<<"测量值3"; }else if(sLabel=="谐波失真"){ heads <<"基波幅度"<<"二次谐波幅度"<<"三次谐波幅度"<<"四次谐波幅度"; } for(QString &head:heads){ QString sTips= "请调节频谱仪至额定状态后,点击测量:"+head; DialogDCStabInput dlg(this,sLabel,sTips); dlg.dataRes = &dataRes[i]; stabInputdlg = &dlg; connect(&dlg,SIGNAL(readData(QString)),this,SLOT(readDCStabData(QString))); dlg.setModal(true); if(dlg.exec()==QDialog::Accepted){ dStdValue = dlg.getInputData(); newdStdValue= TranDecimals(sLabel,dataRes[i],dStdValue); int idx= getIndexByHeader(sLabel,QStrTranQStrList(head)); if(idx!=-1) { dataRes[i][idx] = newdStdValue; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue+unit)); } //计算结果,判断是否合格 if(sLabel=="中频带宽"){ double dMean=0; int idx2=getIndexByHeader(sLabel,QStrTranQStrList("fr1")); dError = dataRes[i][idx2].toDouble(); idx2=getIndexByHeader(sLabel,QStrTranQStrList("fl1")); dError -=dataRes[i][idx2].toDouble(); dMean+=dError; newdError=TranDecimals(sLabel,dataRes[i],dError); idx2=getIndexByHeader(sLabel,QStrTranQStrList("△f1")); dataRes[i][idx2] = newdError; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(newdError+unit)); idx2=getIndexByHeader(sLabel,QStrTranQStrList("fr2")); dError = dataRes[i][idx2].toDouble(); idx2=getIndexByHeader(sLabel,QStrTranQStrList("fl2")); dError -=dataRes[i][idx2].toDouble(); dMean+=dError; newdError=TranDecimals(sLabel,dataRes[i],dError); idx2=getIndexByHeader(sLabel,QStrTranQStrList("△f2")); dataRes[i][idx2] = newdError; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(newdError+unit)); idx2=getIndexByHeader(sLabel,QStrTranQStrList("fr3")); dError = dataRes[i][idx2].toDouble(); idx2=getIndexByHeader(sLabel,QStrTranQStrList("fl3")); dError -=dataRes[i][idx2].toDouble(); dMean+=dError; dMean/=3; newdError=TranDecimals(sLabel,dataRes[i],dError); idx2=getIndexByHeader(sLabel,QStrTranQStrList("△f3")); dataRes[i][idx2] = newdError; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(newdError+unit)); newdError=QString::number(dMean, 'f', 2); idx2=getIndexByHeader(sLabel,QStrTranQStrList("均值")); dataRes[i][idx2] = newdError; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(newdError+unit)); QString sLow,sUpper,sUnit; idx2=getIndexByHeader(sLabel,QStrTranQStrList("指标下限")); ItemUnitSplit(dataRes[i][idx2],sLow,sUnit); idx2=getIndexByHeader(sLabel,QStrTranQStrList("指标上限")); ItemUnitSplit(dataRes[i][idx2],sUpper,sUnit); idx2=getIndexByHeader(sLabel,QStrTranQStrList("结论")); if(dMean>=sLow.toDouble()&&dMean<=sUpper.toDouble()){ sUnit = "符合指标"; }else{ sUnit = "不符合指标"; } dataRes[i][idx2] = sUnit; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(sUnit)); }else if(sLabel=="扫频宽度"){ double dMean=0; int idx2=getIndexByHeader(sLabel,QStrTranQStrList("fr1")); dError = dataRes[i][idx2].toDouble(); idx2=getIndexByHeader(sLabel,QStrTranQStrList("fl1")); dError -=dataRes[i][idx2].toDouble(); dMean+=dError; idx2=getIndexByHeader(sLabel,QStrTranQStrList("fr2")); dError = dataRes[i][idx2].toDouble(); idx2=getIndexByHeader(sLabel,QStrTranQStrList("fl2")); dError -=dataRes[i][idx2].toDouble(); dMean+=dError; idx2=getIndexByHeader(sLabel,QStrTranQStrList("fr3")); dError = dataRes[i][idx2].toDouble(); idx2=getIndexByHeader(sLabel,QStrTranQStrList("fl3")); dError -=dataRes[i][idx2].toDouble(); dMean+=dError; dMean/=3; newdError=QString::number(dMean, 'f', 5); idx2=getIndexByHeader(sLabel,QStrTranQStrList("均值")); dataRes[i][idx2] = newdError; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(newdError+unit)); QString sLow,sUpper,sUnit; idx2=getIndexByHeader(sLabel,QStrTranQStrList("指标下限")); ItemUnitSplit(dataRes[i][idx2],sLow,sUnit); idx2=getIndexByHeader(sLabel,QStrTranQStrList("指标上限")); ItemUnitSplit(dataRes[i][idx2],sUpper,sUnit); idx2=getIndexByHeader(sLabel,QStrTranQStrList("结论")); if(dMean>=sLow.toDouble()&&dMean<=sUpper.toDouble()){ sUnit = "符合指标"; }else{ sUnit = "不符合指标"; } dataRes[i][idx2] = sUnit; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(sUnit)); } else if(sLabel=="中频带宽转换偏差"){ int idx2=getIndexByHeader(sLabel,QStrTranQStrList("测量值")); QString sLow,sUpper,sUnit; //参考点 if(i==0){ idx2=getIndexByHeader(sLabel,QStrTranQStrList("转换偏差")); dataRes[i][idx2] = "/"; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem("/")); sUnit="参考点"; }else{ dError = dataRes[i][idx2].toDouble()-dataRes[0][idx2].toDouble(); idx2=getIndexByHeader(sLabel,QStrTranQStrList("转换偏差")); newdError = QString::number(dError, 'f', 2); dataRes[i][idx2] = newdError; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(newdError+"dB")); idx2=getIndexByHeader(sLabel,QStrTranQStrList("指标下限")); ItemUnitSplit(dataRes[i][idx2],sLow,sUnit); idx2=getIndexByHeader(sLabel,QStrTranQStrList("指标上限")); ItemUnitSplit(dataRes[i][idx2],sUpper,sUnit); if(dError>=sLow.toDouble()&&dError<=sUpper.toDouble()){ sUnit = "符合指标"; }else{ sUnit = "不符合指标"; } } idx2=getIndexByHeader(sLabel,QStrTranQStrList("结论")); dataRes[i][idx2] = sUnit; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(sUnit)); } else if(sLabel=="参考电平"){ int idx2=getIndexByHeader(sLabel,QStrTranQStrList("标准衰减器衰减量")); QString sLow,sUpper,sUnit; //参考点 if(i==0){ sUnit="参考点"; }else{ ItemUnitSplit(dataRes[i][idx2],sLow,sUnit); dError = sLow.toDouble(); idx2=getIndexByHeader(sLabel,QStrTranQStrList("信号源幅度")); dError = dError+dataRes[0][idx2].toDouble()-dataRes[i][idx2].toDouble(); newdError = QString::number(dError, 'f', 2); idx2=getIndexByHeader(sLabel,QStrTranQStrList("测量值")); dataRes[i][idx2] = newdError; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(newdError+unit)); idx2=getIndexByHeader(sLabel,QStrTranQStrList("指标下限")); ItemUnitSplit(dataRes[i][idx2],sLow,sUnit); idx2=getIndexByHeader(sLabel,QStrTranQStrList("指标上限")); ItemUnitSplit(dataRes[i][idx2],sUpper,sUnit); if(dError>=sLow.toDouble()&&dError<=sUpper.toDouble()){ sUnit = "符合指标"; }else{ sUnit = "不符合指标"; } } idx2=getIndexByHeader(sLabel,QStrTranQStrList("结论")); dataRes[i][idx2] = sUnit; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(sUnit)); } else if(sLabel=="垂直刻度"){ int idx2=getIndexByHeader(sLabel,QStrTranQStrList("标准衰减器衰减量")); QString sLow,sUpper,sUnit; //参考点 if(i==0){ sUnit="参考点"; }else{ ItemUnitSplit(dataRes[i][idx2],sUpper,sUnit); ItemUnitSplit(dataRes[0][idx2],sLow,sUnit); dError = sUpper.toDouble()-sLow.toDouble(); idx2=getIndexByHeader(sLabel,QStrTranQStrList("信号源幅度")); dError = dError+dataRes[i][idx2].toDouble()-dataRes[0][idx2].toDouble(); newdError = QString::number(dError, 'f', 2); idx2=getIndexByHeader(sLabel,QStrTranQStrList("测量值")); dataRes[i][idx2] = newdError; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(newdError+unit)); idx2=getIndexByHeader(sLabel,QStrTranQStrList("指标下限")); ItemUnitSplit(dataRes[i][idx2],sLow,sUnit); idx2=getIndexByHeader(sLabel,QStrTranQStrList("指标上限")); ItemUnitSplit(dataRes[i][idx2],sUpper,sUnit); if(dError>=sLow.toDouble()&&dError<=sUpper.toDouble()){ sUnit = "符合指标"; }else{ sUnit = "不符合指标"; } } idx2=getIndexByHeader(sLabel,QStrTranQStrList("结论")); dataRes[i][idx2] = sUnit; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(sUnit)); } else if(sLabel=="平均噪声电平"){ int idx2=getIndexByHeader(sLabel,QStrTranQStrList("测量值")); dError = dataRes[i][idx2].toDouble(); idx2=getIndexByHeader(sLabel,QStrTranQStrList("修正值")); dError += dataRes[i][idx2].toDouble(); QString sUpper,sUnit; idx2=getIndexByHeader(sLabel,QStrTranQStrList("修正后结果")); newdError = QString::number(dError, 'f', 2); dataRes[i][idx2] = newdError; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(newdError+unit)); idx2=getIndexByHeader(sLabel,QStrTranQStrList("指标上限")); ItemUnitSplit(dataRes[i][idx2],sUpper,sUnit); if(dError<sUpper.toDouble()){ sUnit = "符合指标"; }else{ sUnit = "不符合指标"; } idx2=getIndexByHeader(sLabel,QStrTranQStrList("结论")); dataRes[i][idx2] = sUnit; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(sUnit)); } else if(sLabel=="1db增益压缩点"){ int idx2=getIndexByHeader(sLabel,QStrTranQStrList("测量值")); dError = dataRes[i][idx2].toDouble(); QString sUpper,sUnit; idx2=getIndexByHeader(sLabel,QStrTranQStrList("输入衰减")); ItemUnitSplit(dataRes[i][idx2],sUpper,sUnit); dError -= sUpper.toDouble(); newdError = QString::number(dError, 'f', 2); idx2=getIndexByHeader(sLabel,QStrTranQStrList("增益压缩")); dataRes[i][idx2] = newdError; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(newdError+unit)); idx2=getIndexByHeader(sLabel,QStrTranQStrList("技术指标")); ItemUnitSplit(dataRes[i][idx2],sUpper,sUnit); if(dError>sUpper.toDouble()){ sUnit = "符合指标"; }else{ sUnit = "不符合指标"; } idx2=getIndexByHeader(sLabel,QStrTranQStrList("结论")); dataRes[i][idx2] = sUnit; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(sUnit)); } else if(sLabel=="频率显示"||sLabel=="校准信号") { double dMean=0; int idx2=getIndexByHeader(sLabel,QStrTranQStrList("测量值1")); dMean += dataRes[i][idx2].toDouble(); idx2=getIndexByHeader(sLabel,QStrTranQStrList("测量值2")); dMean += dataRes[i][idx2].toDouble(); idx2=getIndexByHeader(sLabel,QStrTranQStrList("测量值3")); dMean += dataRes[i][idx2].toDouble(); dMean/=3; if(sLabel=="频率显示"){ newdError=QString::number(dMean, 'f', 6); idx2=getIndexByHeader(sLabel,QStrTranQStrList("均值")); }else{ newdError=QString::number(dMean, 'f', 3); idx2=getIndexByHeader(sLabel,QStrTranQStrList("测量结果")); } dataRes[i][idx2] = newdError; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(newdError+unit)); QString sLow,sUpper,sUnit; idx2=getIndexByHeader(sLabel,QStrTranQStrList("指标下限")); ItemUnitSplit(dataRes[i][idx2],sLow,sUnit); idx2=getIndexByHeader(sLabel,QStrTranQStrList("指标上限")); ItemUnitSplit(dataRes[i][idx2],sUpper,sUnit); idx2=getIndexByHeader(sLabel,QStrTranQStrList("结论")); if(dMean>=sLow.toDouble()&&dMean<=sUpper.toDouble()){ sUnit = "符合指标"; }else{ sUnit = "不符合指标"; } dataRes[i][idx2] = sUnit; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(sUnit)); } else if(sLabel=="输入频响"||sLabel=="输入衰减") { double dMean=0; int idx2=getIndexByHeader(sLabel,QStrTranQStrList("测量值1")); dMean += dataRes[i][idx2].toDouble(); idx2=getIndexByHeader(sLabel,QStrTranQStrList("测量值2")); dMean += dataRes[i][idx2].toDouble(); idx2=getIndexByHeader(sLabel,QStrTranQStrList("测量值3")); dMean += dataRes[i][idx2].toDouble(); dMean/=3; newdError=QString::number(dMean, 'f', 2); idx2=getIndexByHeader(sLabel,QStrTranQStrList("均值")); dataRes[i][idx2] = newdError; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(newdError+unit)); QString sLow,sUpper,sUnit; //参考点 if(i==0){ idx2=getIndexByHeader(sLabel,QStrTranQStrList("输入频响")); dataRes[i][idx2] = newdError; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(newdError+unit)); sUnit="参考点"; }else{ idx2=getIndexByHeader(sLabel,QStrTranQStrList("输入频响")); dError = dataRes[0][idx2].toDouble()-dMean; newdError = QString::number(dError, 'f', 2); dataRes[i][idx2] = newdError; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(newdError+unit)); idx2=getIndexByHeader(sLabel,QStrTranQStrList("指标下限")); ItemUnitSplit(dataRes[i][idx2],sLow,sUnit); idx2=getIndexByHeader(sLabel,QStrTranQStrList("指标上限")); ItemUnitSplit(dataRes[i][idx2],sUpper,sUnit); if(dError>=sLow.toDouble()&&dError<=sUpper.toDouble()){ sUnit = "符合指标"; }else{ sUnit = "不符合指标"; } } idx2=getIndexByHeader(sLabel,QStrTranQStrList("结论")); dataRes[i][idx2] = sUnit; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(sUnit)); } else if(sLabel=="谐波失真"){ QString sUpper2,sUpper3,sUpper4,sBase,sUnit,sResult; int idx2=getIndexByHeader(sLabel,QStrTranQStrList("二次谐波失真指标上限")); ItemUnitSplit(dataRes[i][idx2],sUpper2,sUnit); idx2=getIndexByHeader(sLabel,QStrTranQStrList("三次谐波失真指标上限")); ItemUnitSplit(dataRes[i][idx2],sUpper3,sUnit); idx2=getIndexByHeader(sLabel,QStrTranQStrList("四次谐波失真指标上限")); ItemUnitSplit(dataRes[i][idx2],sUpper4,sUnit); idx2=getIndexByHeader(sLabel,QStrTranQStrList("基波幅度")); ItemUnitSplit(dataRes[i][idx2],sBase,sUnit); sResult = "符合指标"; idx2=getIndexByHeader(sLabel,QStrTranQStrList("二次谐波幅度")); dError = dataRes[i][idx2].toDouble()-sBase.toDouble(); newdError=QString::number(dError, 'f', 2); idx2=getIndexByHeader(sLabel,QStrTranQStrList("二次谐波失真")); dataRes[i][idx2] = newdError; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(newdError+"dBc")); if(dError>=sUpper2.toDouble()){ sResult = "不符合指标"; } idx2=getIndexByHeader(sLabel,QStrTranQStrList("三次谐波幅度")); dError = dataRes[i][idx2].toDouble()-sBase.toDouble(); newdError=QString::number(dError, 'f', 2); idx2=getIndexByHeader(sLabel,QStrTranQStrList("三次谐波失真")); dataRes[i][idx2] = newdError; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(newdError+"dBc")); if(dError>=sUpper3.toDouble()){ sResult = "不符合指标"; } idx2=getIndexByHeader(sLabel,QStrTranQStrList("四次谐波幅度")); dError = dataRes[i][idx2].toDouble()-sBase.toDouble(); newdError=QString::number(dError, 'f', 2); idx2=getIndexByHeader(sLabel,QStrTranQStrList("四次谐波失真")); dataRes[i][idx2] = newdError; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(newdError+"dBc")); if(dError>=sUpper4.toDouble()){ sResult = "不符合指标"; } idx2=getIndexByHeader(sLabel,QStrTranQStrList("结论")); dataRes[i][idx2] = sResult; ui->tableWidgetCheck->setItem(i,idx2,new QTableWidgetItem(sResult)); } } } } else if(iEquipType==10){ if(dStdValue==FP_INFINITE){ dStdValue=InputDialog("请输入被检示值"); } int idx=-1; QString data,unit; QString ResultCol; if(sLabel=="频率" || sLabel=="剩余调频" || sLabel=="调相相偏"){ idx= getIndexByHeader(sLabel,QStrTranQStrList("指标上限")); ItemUnitSplit(dataRes[i][idx],data,unit); if(sLabel=="剩余调频" ){ ResultCol=sLabel; newdStdValue=QString::number(dStdValue,'f',4); }else if(sLabel=="调相相偏"){ ResultCol="测量值"; newdStdValue=QString::number(dStdValue,'f',4); }else{ ResultCol="测量值"; newdStdValue=TranDecimals(sLabel,dataRes[i],dStdValue,"指标上限"); } idx= getIndexByHeader(sLabel,QStrTranQStrList(ResultCol)); dataRes[i][idx]=newdStdValue+unit; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue+unit)); //测量值 }else if(sLabel=="调幅深度" || sLabel=="功率" || sLabel=="调频频偏" ){ idx= getIndexByHeader(sLabel,QStrTranQStrList("标称值")); ItemUnitSplit(dataRes[i][idx],data,unit); if(sLabel=="调频频偏"){ newdStdValue=QString::number(dStdValue,'f',4); }else{ newdStdValue=TranDecimals(sLabel,dataRes[i],dStdValue); } idx= getIndexByHeader(sLabel,QStrTranQStrList("测量值")); dataRes[i][idx]=newdStdValue+unit; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue+unit)); //测量值 }else if(sLabel=="剩余调幅"){ unit="%"; newdStdValue=QString::number(dStdValue,'f',2); idx= getIndexByHeader(sLabel,QStrTranQStrList(sLabel)); dataRes[i][idx]=newdStdValue+unit; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue+unit)); //测量值 }else if (sLabel=="谐波") { idx= getIndexByHeader(sLabel,QStrTranQStrList("幅度")); ItemUnitSplit(dataRes[i][idx],data,unit); newdStdValue=TranDecimals(sLabel,dataRes[i],dStdValue,"幅度"); idx= getIndexByHeader(sLabel,QStrTranQStrList("基波幅度")); ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue+unit)); //测量值 dataRes[i][idx]=newdStdValue+unit; //采集谐波 //找到频率值 idx= getIndexByHeader(sLabel,QStrTranQStrList("频率")); QString freq,newunit,HarmonicWaveValue; double freqtemp; ItemUnitSplit(dataRes[i][idx],freq,newunit); if(standardEngine.getState()){ //找到谐波次数值 idx= getIndexByHeader(sLabel,QStrTranQStrList("谐波次数")); if(dataRes[i][idx].contains("/")){ freqtemp=freq.toDouble()*(1/dataRes[i][idx].mid(1,2).toDouble()); }else{ freqtemp=freq.toDouble()*dataRes[i][idx].toDouble(); } InstructionLib *instrcutLibstan=getCmdByCheckName(1,sLabel); InstructionLib tempstan; QString cmd; for(QString item:instrcutLibstan->instruct_config.split(";")){ if(item.contains("{FREQ}")){ cmd=item; cmd.replace("{FREQ}",QString::number(freqtemp,'f',3)); } } tempstan.instruct_config=cmd; SendDevice(&tempstan,&standardEngine); HarmonicWaveValue= ReadDevice(instrcutLibstan,&standardEngine); }else{ dStdValue=InputDialog("请输入谐波幅度值"); HarmonicWaveValue=QString::number(dStdValue,'f',2); } idx= getIndexByHeader(sLabel,QStrTranQStrList("谐波幅度")); ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(HarmonicWaveValue+unit)); //测量值 dataRes[i][idx]=HarmonicWaveValue+unit; unit="dBc"; idx= getIndexByHeader(sLabel,QStrTranQStrList("测量值")); QString Res=QString::number(HarmonicWaveValue.toDouble()-newdStdValue.toDouble()); ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(Res+unit)); //测量值 dataRes[i][idx]=(newdStdValue.toDouble()-HarmonicWaveValue.toDouble())+unit; }else if (sLabel=="非谐波") { unit ="dBc"; newdStdValue=QString::number(dStdValue,'f',1); idx= getIndexByHeader(sLabel,QStrTranQStrList("测量值")); ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue+unit)); //测量值 dataRes[i][idx]=newdStdValue+unit; } idx= getIndexByHeader(sLabel,QStrTranQStrList(("相对误差"))); if(idx!=-1) { int idx2=getIndexByHeader(sLabel,QStrTranQStrList(("标准值"))); if(idx2==-1) idx2=getIndexByHeader(sLabel,QStrTranQStrList("标称值")); if(idx2!=-1){ double dTmp = dataRes[i][idx2].toDouble(); dError = (dStdValue-dTmp); newdError=TranDecimals(sLabel,dataRes[i],dError); ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); dataRes[i][idx]=newdError; } } BaseCommonApi::SaveLogInfo(1,QString("转换前 测试值 %1").arg(dStdValue)); BaseCommonApi::SaveLogInfo(1,QString("转换后 测试值 %1").arg(newdStdValue)); if(sLabel=="调频频偏" || sLabel=="调相相偏"|| sLabel=="调幅深度"){ //获取THD值 unit="%"; InstructionLib* instrcutLibTHD= getCmdByCheckName(0,"THD"); if(instrcutLibTHD==nullptr) { dStdValue= dStdValue=InputDialog("请输入THD值"); if(sLabel=="调相相偏"){ newdStdValue=QString::number(dStdValue,'f',3); }else{ newdStdValue=QString::number(dStdValue,'f',2); } }else{ QString ResultThd=ReadDevice(instrcutLibTHD,&deviceEngine); dStdValue = ResultThd.toDouble(); if(sLabel=="调相相偏"){ newdStdValue=QString::number(dStdValue,'f',3); }else{ newdStdValue=QString::number(dStdValue,'f',2); } } idx= getIndexByHeader(sLabel,QStrTranQStrList("THD")); dataRes[i][idx]=newdStdValue+unit; ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue+unit)); BaseCommonApi::SaveLogInfo(1,QString("转换前 THD 测试值 %1").arg(dStdValue)); BaseCommonApi::SaveLogInfo(1,QString("转换后 THD 测试值 %1").arg(newdStdValue)); } } } void CheckWindow::Oscilloscopetextflow() { connectDevice(); for (int _ch=0;_ch<chList.count();_ch++) { if(!this->showDialog("通道切换提示",QString("请切换 %1 通道").arg(chList[_ch]))){continue;} for(int i=0;i<headTableList->keys().length();i++) { BaseCommonApi::SaveLogInfo(1,QString("---------------------------------------------------")); //首先检索当前检定项目的通道 initCheckTable(i); constsLable = headTableList->keys()[i]; QList<QStringList> dataRes = caliDataList->value(constsLable); BaseCommonApi::SaveLogInfo(1,QString("开始 %1 %2 测试").arg(chList[_ch]).arg(constsLable)); QString sParam; QString ValueUnit; double TopValue,BottomValue; InstructionLib *instrcutLibOhm; for (int i = 0; i < dataRes.count(); ++i) { TextCount=1; constDataRes=dataRes[i]; InItcmd(); int _dex= getIndexByHeader(constsLable,QStrTranQStrList("通道")); if(_dex==-1){sParam=chList[_ch];}else{sParam=dataRes[i][_dex];} if(sParam!=chList[_ch]){continue;}; CheckBackColorUpdate(true,i); QString sRet=""; QString newCmd; double dStdValue=FP_INFINITE; QString newdStdValue; int idx= getIndexByHeader(constsLable,QStrTranQStrList("检定项目")); QString sParam; if(idx!=-1) sParam = dataRes[i][idx]; InstructionLib *instrcutLibbiz=getCmdByCheckName(0,sParam); InstructionLib *instrcutLibstan=getCmdByCheckName(1,sParam); int idxitem= getIndexByHeader(constsLable,QStrTranQStrList("项目")); //INIT 被检设备 - 标准设备 instrcutLibOhm= getCmdByCheckName(0,"电阻"); if(deviceEngine.getState()) { //设置电阻值+ instrcutLibOhm= getCmdByCheckName(0,"电阻"); if(instrcutLibOhm!=nullptr){ QStringList ohmList = instrcutLibOhm->instruct_config.split(";"); int idxohm= getIndexByHeader(constsLable,QStrTranQStrList("阻抗")); if(sParam=="输入电阻"){ if(!this->showDialog("输入电阻","请接入电阻测试线")){continue;} idxohm= getIndexByHeader(constsLable,QStrTranQStrList("标称值")); } if(idxohm!=-1) { QString onmname="50Ω"; QString CmdOhm; onmname=dataRes[i][idxohm]; if(onmname=="50Ω"){CmdOhm=ohmList[0];} else if(onmname=="75Ω"){CmdOhm=ohmList[1];} else{ if(ohmList.count()>2){CmdOhm=ohmList[2];}else{CmdOhm=ohmList[1];}; } newCmd = transCmd(CmdOhm,constsLable,constDataRes,true); deviceEngine.sendData(newCmd); } } } if(sParam=="频带宽度"){TextCount=2;}; for (int d=0;d<TextCount;d++) { //标准器输出 BaseCommonApi::SaveLogInfo(1,QString("标准器输出")); if(d==1 && sParam=="频带宽度"){ QStringList sList = instrcutLibstan->instruct_config.split(";"); for(QString &sCmd:sList){ sCmd.replace("{BW}","50000"); break; } } QString LEVEL; QString STVAL; if(d==1 && sParam.contains("触发灵敏度")){ QStringList sList = instrcutLibstan->instruct_config.split(";"); for(QString &sCmd:sList){ if(sCmd.contains("{LEVEL}")){ LEVEL=sCmd; sCmd.replace("{LEVEL}","0"); } else if(sCmd.contains("{STVAL}")) { STVAL=sCmd; sCmd.replace("{STVAL}","1"); } } } if(sParam!="校准信号") { SendDevice(instrcutLibstan,&standardEngine); //被检设备读数 BaseCommonApi::SaveLogInfo(1,QString("被检设备输出")); SendDevice(instrcutLibbiz,&deviceEngine); sRet=ReadDevice(instrcutLibbiz,&deviceEngine); } if(sParam=="输入电阻"){ BaseCommonApi::SaveLogInfo(1,QString("数字多用表控制")); VisaCommonEngine tempEngine=getVisaCommbyRoleName("数字多用表"); //角色 InstructionLib *instrcutLibNum=getCmdByRoleName("数字多用表",sParam); sRet=ReadDevice(instrcutLibNum,&tempEngine); } if(sParam=="校准信号"){ if(dataRes[i][idxitem]=="频率"){ if(!this->showDialog("输入电阻","请接入频率测试线")){continue;} BaseCommonApi::SaveLogInfo(1,QString("通用计数器控制")); VisaCommonEngine tempEngine=getVisaCommbyRoleName("通用计数器"); //角色 InstructionLib *instrcutLibNum=getCmdByRoleName("通用计数器",sParam); //SendDevice(instrcutLibbiz,&deviceEngine); sRet=ReadDevice(instrcutLibNum,&tempEngine); }else if(dataRes[i][idxitem]=="幅度"){ if(!this->showDialog("校准信号幅度","请接入幅度测试线")){continue;} instrcutLibbiz=getCmdByCheckName(0,"校准信号幅度1"); //初始化被检 SendDevice(instrcutLibbiz,&deviceEngine); //获取高值 TopValue=ReadDevice(instrcutLibbiz,&deviceEngine).toDouble(); //获取低值 instrcutLibbiz=getCmdByCheckName(0,"校准信号幅度2"); SendDevice(instrcutLibbiz,&deviceEngine); BottomValue=ReadDevice(instrcutLibbiz,&deviceEngine).toDouble(); //控制标准器 if(!this->showDialog("校准信号幅度","请接入9500测试线")){continue;} //QString config=instrcutLibstan->instruct_config; InstructionLib instrcutLibtest; for(int d=0;d<=1;d++){ instrcutLibtest.instruct_config=instrcutLibstan->instruct_config; QString StanValue; double proc; double values; for (QString value:instrcutLibtest.instruct_config.split(';')) { if(value.contains("{STVAL}")){ StanValue=value; STVAL=value; break; } } if(d==0){ instrcutLibtest.instruct_config= instrcutLibtest.instruct_config.replace("{STVAL}",QString::number(TopValue,'f',4)); proc=TopValue; values=TopValue; }else{ instrcutLibtest.instruct_config= instrcutLibtest.instruct_config.replace("{STVAL}",QString::number(BottomValue,'f',4)); proc=BottomValue; values=BottomValue; } //测量值测试 int count=0; double lastvlaue; double Sub=0.001; SendDevice(&instrcutLibtest,&standardEngine); //获取幅度值 instrcutLibbiz=getCmdByCheckName(0,"校准信号幅度3"); SendDevice(instrcutLibbiz,&deviceEngine); Delay_MSec(2000); double tempvalue=ReadDevice(instrcutLibbiz,&deviceEngine).toDouble(); QString num; while(tempvalue<values-0.005){ proc+=Sub; num=QString::number(proc,'f',3); StanValue.replace("{STVAL}",QString::number(proc)); instrcutLibtest.instruct_config=StanValue; StanValue.replace(QString::number(proc),"{STVAL}"); SendDevice(&instrcutLibtest,&standardEngine); Delay_MSec(500); lastvlaue=ReadDevice(instrcutLibbiz,&deviceEngine).toDouble(); if(lastvlaue>values || count>50){ break; values=proc; } tempvalue=lastvlaue; count++; } if(d==0){TopValue=values;}else{BottomValue=values;} } int topidx= getIndexByHeader(constsLable,QStrTranQStrList("顶部测量值")); int bomidx= getIndexByHeader(constsLable,QStrTranQStrList("底部测量值")); dataRes[i][topidx]=QString::number(TopValue); dataRes[i][bomidx]=QString::number(BottomValue); sRet=QString::number(TopValue-BottomValue); } } if(sParam.contains("触发灵敏度")){ int count=0; idx= getIndexByHeader(constsLable,QStrTranQStrList("触发类型")); if(dataRes[i][idx]=="内触发"){ idx= getIndexByHeader(constsLable,QStrTranQStrList("标称值")); QString value=dataRes[i][idx]; QString data,unit; ItemUnitSplit(value,data,unit); double step=0.01; double textvalue=1*data.toDouble(); QString tempSTVAL; tempSTVAL=STVAL.replace("{STVAL}",QString::number(textvalue)); instrcutLibstan->instruct_config=tempSTVAL; SendDevice(instrcutLibstan,&standardEngine); //是否调节电平-- // while(sRet=="TRIGGER" && count<20){ textvalue-=step; tempSTVAL=STVAL.replace("{STVAL}",QString::number(textvalue)); instrcutLibstan->instruct_config=tempSTVAL; SendDevice(instrcutLibstan,&standardEngine); sRet=ReadDevice(instrcutLibbiz,&deviceEngine); //是否调节电平-- 或延迟 // count++; } sRet=textvalue; }else{ QString data,unit; double textvalue; QString TempSTVAL; idx= getIndexByHeader(constsLable,QStrTranQStrList("标称值")); double Step=0.005; ItemUnitSplit(dataRes[i][idx],data,unit); data=transUnit(data,unit,true); textvalue=data.toDouble(); for(int i=0;i<5;i++){ sRet=ReadDevice(instrcutLibbiz,&deviceEngine); if(sRet=="TRIGGER"){break;}; } if(sRet=="TRIGGER"){ sRet=QString::number(textvalue); }else{ count=0; while(sRet!="TRIGGER" && count<20){ textvalue+=Step; TempSTVAL=STVAL.replace("{STVAL}",QString::number(textvalue)); instrcutLibstan->instruct_config=TempSTVAL; SendDevice(instrcutLibstan,&standardEngine); sRet=ReadDevice(instrcutLibbiz,&deviceEngine); //是否调节电平-- 或延迟 // count++; } } } } //测试结果单位转换 if(sRet!=""){ idx= getIndexByHeader(constsLable,QStrTranQStrList("单位")); //ValueUnit if(idx!=-1) { ValueUnit=dataRes[i][idx]; }else { QStringList temp; temp.append("标准值"); temp.append("标称值"); int idx= getIndexByHeader(constsLable,temp); if(idx!=-1) ItemUnitSplit(dataRes[i][idx],ValueUnit,ValueUnit); } dStdValue = transUnit(sRet,ValueUnit); } autoAdujstData(constsLable,i,dStdValue,dataRes); CheckBackColorUpdate(false,i); closeCmd(); Delay_MSec(2000); } //CLOSE 被检设备 - 标准设备 } caliDataList->insert(constsLable,dataRes); } closeDevice(); } } void CheckWindow::Delay_MSec(unsigned int msec) { QTime _Timer = QTime::currentTime().addMSecs(msec); while( QTime::currentTime() < _Timer ) QCoreApplication::processEvents(QEventLoop::AllEvents, 100); } void CheckWindow::SignalGeneratortextflow(){ Teststate=SyncRunStatus::Running; if(headTableList->keys().count()==0) return; BaseCommonApi::SaveLogInfo(1,QString("-----------------------------------")); connectDevice(); for(int i=0;i<headTableList->keys().length();i++) { if(Teststate==SyncRunStatus::Stopped){break;}; //每次循环按钮变化 initCheckTable(i); constsLable= headTableList->keys()[i]; QList<QStringList> dataRes = caliDataList->value(constsLable); BaseCommonApi::SaveLogInfo(1,QString("开始 %1 测试").arg(constsLable)); for (int i = 0; i < dataRes.count(); ++i) { if(Teststate==SyncRunStatus::Stopped){break;}; constDataRes=dataRes[i]; InItcmd(); QString sRet=""; QString newCmd; double dStdValue=FP_INFINITE,dError=0; QString newdStdValue,newdError; //获取检定项目 BaseCommonApi::SaveLogInfo(1,QString("被检设备设置")); QString sParam,TempValue; TempValue.append("检定项目"); int idx= getIndexByHeader(constsLable,QStrTranQStrList(TempValue)); if(idx!=-1) sParam = dataRes[i][idx]; //背景颜色显示 CheckBackColorUpdate(true,i); //首先设置被检设备输出 InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); SendDevice(instrcutLib,&deviceEngine,true); //设备标准仪器 BaseCommonApi::SaveLogInfo(1,QString("标准仪器输出")); InstructionLib *instrcutLibstan=getCmdByCheckName(1,sParam); SendDevice(instrcutLibstan,&standardEngine); if(sParam=="功率"){ bool IsCli=true; if(i!=0){ idx = getIndexByHeader(constsLable,QStrTranQStrList("频率")); QString FreqValue,PageFreqValue; FreqValue=Removeunit(dataRes[i][idx]); PageFreqValue=Removeunit(dataRes[i-1][idx]); if(PageFreqValue==FreqValue){ IsCli=false; } } if(IsCli){ //&& 只在频率切换时进行校准 //功率校准 InstructionLib *PowerPage=getCmdByCheckName(1,"功率界面切换"); InstructionLib *PowerCali=getCmdByCheckName(0,"功率校准"); InstructionLib *PowerCaliSt=getCmdByCheckName(1,"功率校准"); if(PowerCali!=nullptr && PowerCaliSt!=nullptr && PowerCaliSt!=nullptr){ InstructionLib Temp; InstructionLib TempSt; for(QString item:PowerCali->instruct_read.split(';')) { Temp.instruct_config=item; SendDevice(&Temp,&deviceEngine); if(item.contains("20")){ TempSt.instruct_config=PowerPage->instruct_config.split(";")[0]; SendDevice(&TempSt,&standardEngine); TempSt.instruct_config=PowerCaliSt->instruct_config.split(";")[0]; SendDevice(&TempSt,&standardEngine); }else{ TempSt.instruct_config=PowerPage->instruct_config.split(";")[1]; SendDevice(&TempSt,&standardEngine); TempSt.instruct_config=PowerCaliSt->instruct_config.split(";")[1]; SendDevice(&TempSt,&standardEngine); } } } } } sRet=ReadDevice(instrcutLib,&standardEngine); if(sRet!=""){ TempValue.clear(); TempValue.append("单位"); idx= getIndexByHeader(constsLable,QStrTranQStrList(TempValue)); dStdValue = transUnit(sRet,dataRes[i][idx]); } autoAdujstData(constsLable,i,dStdValue,dataRes); CheckBackColorUpdate(false,i); closeCmd(); Delay_MSec(2000); } caliDataList->insert(constsLable,dataRes); } closeDevice(); } void CheckWindow::on_pushButton_pause_clicked() { } void CheckWindow::on_pushButton_stop_clicked() { Teststate=SyncRunStatus::Stopped; if(iEquipType==5){ if(timerChart->isActive()) timerChart->stop(); } } void CheckWindow::on_pushButton_clicked() { getCheckDevice(false); } void CheckWindow::on_pushButton_2_clicked() { ui->comboBoxName->setCurrentIndex(0); ui->comboBoxModal->setCurrentIndex(0); ui->comboBoxCustomer->setCurrentIndex(0); ui->lineEditNo->setText(""); getCheckDevice(false); } void CheckWindow::on_pushButton_10_clicked() { getCheckMethod(); } void CheckWindow::on_pushButton_11_clicked() { ui->lineEditName->setText(""); ui->lineEditCreator->setText(""); getCheckMethod(); } void CheckWindow::on_pushButton_4_clicked() { updateStandardTable(); } void CheckWindow::on_pushButton_5_clicked() { ui->comboBoxName_2->setCurrentIndex(0); ui->comboBoxModal_2->setCurrentIndex(0); ui->lineEditNo_2->setText(""); ui->lineEdit_4->setText(""); updateStandardTable(); } void CheckWindow::on_pushButton_6_clicked() { showDevice(); } void CheckWindow::on_pushButton_7_clicked() { FormCheckPoint *checkWindow = new FormCheckPoint(nullptr,selectTaskList[0].sample_id); checkWindow->setWindowState(Qt::WindowMaximized); checkWindow->setWindowModality(Qt::ApplicationModal); checkWindow->show(); } void CheckWindow::on_pushButton_8_clicked() { ConnectInfo& item = connectList[currConnectIdx]; if(item.programInterface.id==""){ BaseCommonApi baseApi; qint64 id = baseApi.generateId(); item.programInterface.id = QString::number(id); item.programInterface.device_id = item.id; if(ui->radioButton_serial->isChecked()) item.programInterface.communication_type = "SerialPort"; else item.programInterface.communication_type = "Visa"; item.programInterface.serial_port = QString("%1;%2;%3;%4;%5").arg(ui->comboBox_port->currentText()).arg(ui->comboBox_baurt->currentText()).arg(ui->comboBox_check->currentText()) .arg(ui->comboBox_data->currentText()).arg(ui->comboBox_stop->currentText()); item.programInterface.visa = ui->comboBox_visa->currentText(); if(BaseCommonApi::InsertVerificationProgramConfigInterface(item.programInterface)){ QMessageBox::information(this, "提示", "保存成功!"); } else { QMessageBox::warning(this, "警告", "保存失败!"); } }else{ if(ui->radioButton_serial->isChecked()) item.programInterface.communication_type = "SerialPort"; else item.programInterface.communication_type = "Visa"; item.programInterface.serial_port = QString("%1;%2;%3;%4;%5").arg(ui->comboBox_port->currentText()).arg(ui->comboBox_baurt->currentText()).arg(ui->comboBox_check->currentText()) .arg(ui->comboBox_data->currentText()).arg(ui->comboBox_stop->currentText()); item.programInterface.visa = ui->comboBox_visa->currentText(); if(BaseCommonApi::UpdateVerificationProgramConfigInterface(item.programInterface)){ QMessageBox::information(this, "提示", "保存成功!"); }else{ QMessageBox::warning(this, "警告", "保存失败!"); } } } void CheckWindow::on_comboBox_visa_OnCurrentTextChanged(QString arg1) { //lab_deviceinfo getJoinState(arg1); } bool CheckWindow::getJoinState(QString arg1) { bool IsSucc=false; QString visaAdd=arg1; QStringList parts = engine.getdeviceIdninfo(visaAdd).split(","); if(parts.count()>2) { ui->lab_deviceinfo->setText(parts[0]+"-"+parts[1]); IsSucc=true; } if(parts.contains("false")) { ui->lab_deviceinfo->setText("无连接"); } return IsSucc; } void CheckWindow::ItemUnitSplit(QString Value,QString &data,QString &unit) { QString sData2=Value; QString sNewData,sUnit; // 正则表达式匹配数字 QRegularExpression reLetters("[a-zA-ZΩΜΩ%]"); QRegularExpression reLetters1("[^a-zA-ZΩΜΩ%]"); data=sData2.replace(reLetters,""); unit= Value.replace(reLetters1,""); } void CheckWindow::CheckBackColorUpdate(bool State,int row) { QBrush colorBrush(Qt::white); if(State) { QColor lightGreenColor(173, 216, 230); colorBrush.setColor(lightGreenColor); } for (int col = 0; col < ui->tableWidgetCheck->columnCount(); ++col) { QTableWidgetItem *item = ui->tableWidgetCheck->item(row, col); if (item) { item->setBackground(colorBrush); } } } QString CheckWindow::Removeunit(QString data) { QRegularExpression re("[a-zA-ZΩΜΩ%]"); return data.replace(re,""); } bool CheckWindow::showDialog(QString title,QString mess) { QMessageBox::StandardButton reply; reply = QMessageBox::question(this, title, mess, QMessageBox::Yes|QMessageBox::No); if (reply == QMessageBox::Yes) { return true; } else { return false; } } QMap<QStringList, QStringList> CheckWindow::readDataFromFile(QString filePath) { // 获取应用程序的根目录 QString path = QCoreApplication::applicationDirPath()+"\\File\\config\\"+filePath; QMap<QStringList, QStringList> dataMap; QFile file(path); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { // 错误处理 qDebug() << "无法打开文件:" << file.errorString(); QString str=file.errorString(); return dataMap; } QTextStream in(&file); in.setCodec("UTF-8"); QString line; bool isFirstLine = true; // 跳过第一行 while (!in.atEnd()) { line = in.readLine(); if (isFirstLine) { isFirstLine = false; // 第一行已读,接下来读取数据 continue; } // 使用'|'分割键和值 QStringList keyValuePairs = line.split(QRegExp("\\s*\\|\\s*"), QString::SkipEmptyParts); if (keyValuePairs.size() != 2) { continue; // 跳过不符合格式的行 } QStringList keys, values; // 分割键部分,并替换空格为空字符串 QString keyPart = keyValuePairs.at(0); keys = keyPart.split(',', QString::SkipEmptyParts); for (int i = 0; i < keys.size(); ++i) { keys[i].replace(" ", ""); } // 分割值部分,并替换空格为空字符串 QString valuePart = keyValuePairs.at(1); values = valuePart.split(',', QString::SkipEmptyParts); for (int i = 0; i < values.size(); ++i) { values[i].replace(" ", ""); values[i].replace("\t", ""); } // 将键和值的QStringList插入到QMap中 dataMap.insert(keys, values); } file.close(); return dataMap; } QStringList CheckWindow::QStrTranQStrList(QString value) { QStringList valuelist; valuelist.append(value); return valuelist; } void CheckWindow::keyPressEvent(QKeyEvent *ev) { if(ui->stackedWidget_2->currentIndex()==1&&iEquipType==4){ if(ev->key() == Qt::Key_Right) { int idx = curDevciceIdx+1; on_deviceButton_clicked(idx); //return; }else if(ev->key() == Qt::Key_Left) { int idx = curDevciceIdx-1; on_deviceButton_clicked(idx); //return; } } //QWidget::keyPressEvent(ev); } void CheckWindow::SendDevice(InstructionLib* Inst,VisaCommonEngine* Visa,bool IsUnitTran){ //发送仪器 进一步封装 QString newCmd=""; if(Visa->getState()){ if(Inst!=nullptr){ QStringList sList = Inst->instruct_config.split(";"); if(sList.length()>0){ for (QString& sCmd : sList){ newCmd = transCmd(sCmd,constsLable,constDataRes,IsUnitTran); if(newCmd!=""){ QString str=Visa->commType; Visa->sendData(newCmd); qDebug() << "config cmds:" << newCmd; } } } } } } QString CheckWindow::ReadDevice(InstructionLib* Inst,VisaCommonEngine* Visa,bool IsUnitTran){ //读取仪器 进一步封装 QString newCmd=""; QString result=""; if(Visa->getState()){ if(Inst!=nullptr){ newCmd = transCmd(Inst->instruct_read,constsLable,constDataRes,IsUnitTran); if(newCmd!=""){ qDebug() << "query cmds:" << newCmd; result = Visa->queryData(newCmd); } } } return result; } void CheckWindow::CreateCharts(){ deleteItem(ui->horizontalLayoutChart); QChart *qchart = new QChart; chartView = new QChartView(qchart,this); chartView->setRenderHint(QPainter::Antialiasing); //把chart放到容器里 //ui->graphicsView->setChart(qchart); //设置抗锯齿 //ui->graphicsView->setRenderHint(QPainter::Antialiasing); //创建两条线 QLineSeries *ser0 = new QLineSeries; //QLineSeries *ser1 = new QLineSeries; //设置名字 ser0->setName("变化趋势 单位:℃"); //ser1->setName("ser1"); //放入charts里 qchart->addSeries(ser0); //qchart->addSeries(ser1); //创建x坐标 QDateTimeAxis *QaX = new QDateTimeAxis; //格式 QaX->setFormat("hh:mm:ss"); QaX->setTickCount(5); //QaX->setTitleText("time"); //创建y坐标 QValueAxis *QaY = new QValueAxis; //设置范围 //QaY->setRange(-1,1); QaY->setTickCount(6); //QaY->setTitleText("单位:℃"); //将线条放入表中 qchart->setAxisX(QaX,ser0); qchart->setAxisY(QaY,ser0); //qchart->setAxisX(QaX,ser1); //qchart->setAxisY(QaY,ser1); ui->horizontalLayoutChart->addWidget(chartView); //QLayoutItem *child = ui->horizontalLayoutChart->itemAt(0); //QChartView *chartView = qobject_cast<QChartView *>(child->widget()); //QChart *qchart =(QChart *)chartView->chart(); //获取之前的ser //QLineSeries *ser0 = (QLineSeries *)qchart->series().at(0); //ser0->clear(); } void CheckWindow::RefreshTime_Slot(){ QString sLabel = headTableList->keys()[curHeadIdx]; QString sRet ; int ch; if(deviceEngine.getState()){ InstructionLib *instrcutLib = getCmdByCheckName(0,sLabel); if(sLabel=="波动性测试"){ QString newCmd; SendDevice(instrcutLib,&deviceEngine); sRet=ReadDevice(instrcutLib,&deviceEngine); }else if(sLabel=="均匀性测试"){ InstructionLib instrcutLibTemp; QStringList CmdList=instrcutLib->instruct_read.split(";"); /*if(NumberCount%2==0){ ch=0; }else{ ch=1; }*/ //默认只读移动的温度计 instrcutLibTemp.instruct_read=CmdList[1]; SendDevice(instrcutLib,&deviceEngine); sRet=ReadDevice(&instrcutLibTemp,&deviceEngine); //sRet="通道"+QString::number(ch)+":"+ReadDevice(&instrcutLibTemp,&deviceEngine); NumberCount++; } } //获取当前时间 QDateTime currentTime = QDateTime::currentDateTime(); //获取随机数 //qsrand(QTime::currentTime().second()); //int rand = qrand()%100;//获取0~10之间的数 //获取初始化的qchart QChart *qchart =(QChart *)chartView->chart(); if(qchart!=nullptr){ //获取之前的ser QLineSeries *ser0 = (QLineSeries *)qchart->series().at(0); //更新数据 double data = sRet.toDouble(); ser0->append(currentTime.toMSecsSinceEpoch(),data); qchart->axisX()->setMin(QDateTime::currentDateTime().addSecs(-1*30)); qchart->axisX()->setMax(QDateTime::currentDateTime().addSecs(1*30)); ui->lineEditTemp->setText(sRet); } } void CheckWindow::on_pushButtonGetTemp_clicked() { QString sLabel = headTableList->keys()[curHeadIdx]; QString sData = ui->lineEditTemp->text(); if(sData.contains("通道")) sData=sData.mid(4,sData.count()); InstructionLib *instrcutLib = getCmdByCheckName(0,sLabel); QString sRet; QList<QStringList> dataRes = caliDataList->value(sLabel); if(sLabel=="波动性测试"){ QTableWidgetItem *currentItem=ui->tableWidgetCheck->currentItem(); if(currentItem==nullptr||currentItem->column()<4||currentItem->column()>18){ ui->tableWidgetCheck->setCurrentCell(0,4); } currentItem=ui->tableWidgetCheck->currentItem(); int row = currentItem->row(); int col = currentItem->column(); if(row>=0 && row <=7){ for(int i=0;i<=7;i++){ for(int j=4;j<=18;j++){ if(Teststate==SyncRunStatus::Stopped){return;}; //每次读取值间隔一秒时间 Delay_MSec(1000); SendDevice(instrcutLib,&deviceEngine); sRet=ReadDevice(instrcutLib,&deviceEngine); ui->tableWidgetCheck->setItem(i,j,new QTableWidgetItem(sRet)); dataRes[i][j] = sRet; } } } if(row>=8 && row <=15){ for(int i=8;i<=15;i++){ for(int j=4;j<=18;j++){ //每次读取值间隔一秒时间 if(Teststate==SyncRunStatus::Stopped){return;}; Delay_MSec(1000); SendDevice(instrcutLib,&deviceEngine); sRet=ReadDevice(instrcutLib,&deviceEngine); ui->tableWidgetCheck->setItem(i,j,new QTableWidgetItem(sRet)); dataRes[i][j] = sRet; } } } for(int i=0;i<ui->tableWidgetCheck->rowCount()/8;i++){ double dMin=0; double dMax=0; for(int k=i*8;k<i*8+8;k++){ for(int j=4;j<19;j++){ QString sTmp = ui->tableWidgetCheck->item(k,j)->text(); if(sTmp!=""){ dMin = qMin(dMin,sTmp.toDouble()); dMax = qMax(dMax,sTmp.toDouble()); } } } int idx =getIndexByHeader(sLabel,QStrTranQStrList("最大值")); ui->tableWidgetCheck->item(i*8,idx)->setText(QString::number(dMax)); dataRes[i*8][idx] = QString::number(dMax); idx =getIndexByHeader(sLabel,QStrTranQStrList("最小值")); ui->tableWidgetCheck->item(i*8,idx)->setText(QString::number(dMin)); dataRes[i*8][idx] = QString::number(dMin); idx =getIndexByHeader(sLabel,QStrTranQStrList("波动性")); QString sErr = QString::number(dMax-dMin); if(idx>=0&&idx<dataRes[i*8].length()) dataRes[i*8][idx] = sErr; if(ui->tableWidgetCheck->item(i*8,idx)!=nullptr) ui->tableWidgetCheck->item(i*8,idx)->setText(sErr); else ui->tableWidgetCheck->setItem(i*8,idx,new QTableWidgetItem(sErr)); } caliDataList->insert(sLabel,dataRes); }else if(sLabel=="均匀性测试"){ QStringList Head=headTableList->value(sLabel); QTableWidgetItem *currentItem=ui->tableWidgetCheck->currentItem(); InstructionLib instrcutLibTemp; QStringList CmdList=instrcutLib->instruct_read.split(";"); if(currentItem==nullptr||currentItem->column()<5||currentItem->column()>14){ ui->tableWidgetCheck->setCurrentCell(0,5); } currentItem=ui->tableWidgetCheck->currentItem(); int row = currentItem->row(); //int col = currentItem->column(); if(row>=0){ for(int j=5;j<=12;j++){ if(Teststate==SyncRunStatus::Stopped){break;}; Delay_MSec(1000); QString CurrentColName=Head[j]; //int rand =0; if(CurrentColName.contains("O")){ instrcutLibTemp.instruct_read=CmdList[0]; SendDevice(instrcutLib,&deviceEngine); sRet=ReadDevice(&instrcutLibTemp,&deviceEngine); }else{ instrcutLibTemp.instruct_read=CmdList[1]; SendDevice(instrcutLib,&deviceEngine); sRet=ReadDevice(&instrcutLibTemp,&deviceEngine); } ui->tableWidgetCheck->setItem(row,j,new QTableWidgetItem(sRet)); dataRes[row][j] = sRet; } } //currentItem->setText(sData); for(int i=0;i<ui->tableWidgetCheck->rowCount()/8;i++){ double dMin=0; double dMax=0; double dUpErr=0; double dDownErr=0; for(int k=i*8;k<i*8+8;k++){ double dMean1=0; double dMean2=0; int idx =getIndexByHeader(sLabel,QStrTranQStrList("示值ROA1")); if(dataRes[k][idx]!="") dMean1 += dataRes[k][idx].toDouble(); idx =getIndexByHeader(sLabel,QStrTranQStrList("ROA2")); if(dataRes[k][idx]!="") dMean1 += dataRes[k][idx].toDouble(); idx =getIndexByHeader(sLabel,QStrTranQStrList("ROA3")); if(dataRes[k][idx]!="") dMean1 += dataRes[k][idx].toDouble(); idx =getIndexByHeader(sLabel,QStrTranQStrList("ROA4")); if(dataRes[k][idx]!="") dMean1 += dataRes[k][idx].toDouble(); dMean1/=4; idx =getIndexByHeader(sLabel,QStrTranQStrList("示值RA1")); if(dataRes[k][idx]!="") dMean2 += dataRes[k][idx].toDouble(); idx =getIndexByHeader(sLabel,QStrTranQStrList("RA2")); if(dataRes[k][idx]!="") dMean2 += dataRes[k][idx].toDouble(); idx =getIndexByHeader(sLabel,QStrTranQStrList("RA3")); if(dataRes[k][idx]!="") dMean2 += dataRes[k][idx].toDouble(); idx =getIndexByHeader(sLabel,QStrTranQStrList("RA4")); if(dataRes[k][idx]!="") dMean2 += dataRes[k][idx].toDouble(); dMean2/=4; if(k<i*8+4){ dUpErr = qMax(dMean2-dMean1,dUpErr); }else{ dDownErr = qMax(dMean2-dMean1,dDownErr); } idx =getIndexByHeader(sLabel,QStrTranQStrList("ROA均值")); ui->tableWidgetCheck->item(k,idx)->setText(QString::number(dMean1)); dataRes[k][idx] = QString::number(dMean1); idx =getIndexByHeader(sLabel,QStrTranQStrList("RA均值")); ui->tableWidgetCheck->item(k,idx)->setText(QString::number(dMean2)); dataRes[k][idx] = QString::number(dMean2); for(int j=5;j<13;j++){ QString sTmp = ui->tableWidgetCheck->item(k,j)->text(); if(sTmp!=""){ dMin = qMin(dMin,sTmp.toDouble()); dMax = qMax(dMax,sTmp.toDouble()); } } } int idx =getIndexByHeader(sLabel,QStrTranQStrList("上水平面温差")); ui->tableWidgetCheck->item(i*8,idx)->setText(QString::number(dUpErr)); dataRes[i*8][idx] = QString::number(dUpErr); idx =getIndexByHeader(sLabel,QStrTranQStrList("下水平面温差")); ui->tableWidgetCheck->item(i*8,idx)->setText(QString::number(dDownErr)); dataRes[i*8][idx] = QString::number(dDownErr); idx =getIndexByHeader(sLabel,QStrTranQStrList("水平最大温差")); ui->tableWidgetCheck->item(i*8,idx)->setText(QString::number(dUpErr-dDownErr)); dataRes[i*8][idx] = QString::number(dUpErr-dDownErr); idx =getIndexByHeader(sLabel,QStrTranQStrList("工作区域最大温差")); QString sErr = QString::number(dMax-dMin); if(idx>=0&&idx<dataRes[i*8].length()) dataRes[i*8][idx] = sErr; if(ui->tableWidgetCheck->item(i*8,idx)!=nullptr) ui->tableWidgetCheck->item(i*8,idx)->setText(sErr); else ui->tableWidgetCheck->setItem(i*8,idx,new QTableWidgetItem(sErr)); } caliDataList->insert(sLabel,dataRes); } } void CheckWindow::readDCStabData(QString sLabel){ QString sRet; if(iEquipType==2){ qDebug() << sLabel; QString sRole = "电压表"; if(sLabel=="纹波电压") sRole="示波器"; else if(sLabel=="电流示值误差(直接测量)") sRole ="电流表"; BaseCommonApi::SaveLogInfo(1,QString("可编程交流电源读取数值")); VisaCommonEngine engineRole=getVisaCommbyRoleName("sRole"); //角色 InstructionLib *instrcutLibRole=getCmdByRoleName("sRole",sLabel); sRet = ReadDevice(instrcutLibRole,&engineRole); }else{ BaseCommonApi::SaveLogInfo(1,QString("被检设备输出")); int idx= getIndexByHeader(sLabel,QStrTranQStrList("检定项目")); QString sParam; if(idx!=-1) sParam = stabInputdlg->dataRes->at(idx); InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); SendDevice(instrcutLib,&deviceEngine); sRet=ReadDevice(instrcutLib,&deviceEngine); } //sRet="0.005"; if(sRet!=""){ QStringList TempValue; TempValue.append("单位"); int idx= getIndexByHeader(sLabel,TempValue); double dStdValue = transUnit(sRet,stabInputdlg->dataRes->at(idx)); stabInputdlg->setInputData(dStdValue); } } void CheckWindow::on_pushButton_Hidd_clicked() { if(ui->pushButton_Hidd->text()=="隐藏"){ ui->pushButton_Hidd->setText("显示"); ui->widget_3->hide(); ui->widget_4->hide(); ui->widget_5->hide(); ui->groupBox_5->hide(); foreach(QWidget *widget, ui->verticalLayout_6->findChildren<QWidget *>()) { widget->hide(); } //ui->groupBoxChart->hide(); //ui->groupBox_3->hide(); //ui->groupBox_7->hide(); }else{ ui->pushButton_Hidd->setText("隐藏"); ui->widget_3->show(); ui->widget_4->show(); ui->widget_5->show(); ui->groupBox_5->show(); foreach(QWidget *widget, ui->verticalLayout_6->findChildren<QWidget *>()) { widget->show(); } //ui->groupBoxChart->show(); //ui->groupBox_3->show(); //ui->groupBox_7->show(); } } double CheckWindow::InputDialog(QString Content) { double value; bool bOk = false; value = QInputDialog::getDouble(this,"手动测试",Content,0,-100000, 100000,5,&bOk); if (!bOk) value=0; return value; }