#include "checkwindow.h" #include "ui_checkwindow.h" #include "dialogcheckresult.h" #include <QMessageBox> #include "basecommonapi.h" #include <QInputDialog> #include "newcheckmethod.h" #include "formcheckpoint.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<7;i++) ui->tableWidgetStd->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); ui->tableWidgetStd->setColumnWidth(0, 60); 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.insert("V",1); unitTransList.insert("MV",1000); unitTransList.insert("A",1); unitTransList.insert("MA",1000); unitTransList.insert("UA",1000000); unitTransList.insert("W",1); unitTransList.insert("KW",0.001); unitTransList.insert("Ω",1); unitTransList.insert("KΩ",0.001); unitTransList.insert("MΩ",0.000001); //统一定义命令占位符 cmdPlaceHolderList.insert("{CH}","通道"); cmdPlaceHolderList.insert("{RANV}","电压量程"); cmdPlaceHolderList.insert("{RANI}","电流量程"); cmdPlaceHolderList.insert("{RANHZ}","频率量程"); cmdPlaceHolderList.insert("{RANO}","电阻量程"); cmdPlaceHolderList.insert("{YSCA}","幅度/DIV"); cmdPlaceHolderList.insert("{XSCA}","时间/DIV"); cmdPlaceHolderList.insert("{POSI}","波形偏移量"); cmdPlaceHolderList.insert("{STVAL}","标准值"); cmdPlaceHolderList.insert("{RAN}","量程"); cmdPlaceHolderList.insert("{FREQ}","频率"); getCheckDevice(); //ui->stackedWidget_2->setCurrentIndex(1); //ui->tableWidgetDevice->verticalHeader()->sectionResizeMode(QHeaderView::Stretch); } CheckWindow::~CheckWindow() { myTaskList.clear(); programList.clear(); connectList.clear(); selectTaskList.clear(); headList.clear(); calibrationList.clear(); measureCalList.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].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() { 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(); int rowCount=0; int row=0; //catDeviceList.clear(); catIdList.clear(); if(programInfo.standard_device_id!=""){ catIdList = programInfo.standard_device_id.split(","); for(int i=catIdList.length()-1;i>=0; i--) { QString id = catIdList[i]; 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)); row++; //catDeviceList.append(item); }else{ catIdList.removeAt(i); } } result.clear(); } } } 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(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(""); updateStandardTable(); } ui->stackedWidget->setCurrentIndex(2); } } void CheckWindow::showDevice() { //QStringList idList = programInfo.standard_device_id.split(","); QString sId=""; 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; } } if(sId==""){ QMessageBox::warning(this, "提示", "请选择标准设备!"); }else{ //programInfo = BaseCommonApi::getVerificationProgramInfo(sId); initDeviceInfo(sId); ui->stackedWidget->setCurrentIndex(3); } } void CheckWindow::initDeviceInfo(QString sId) { standardId = sId; QString strStyle = QString("QLabel{image:url(%1);}").arg(programInfo.img_path); qDebug() << "strStyle:" << strStyle; ui->label_8->setStyleSheet(strStyle); 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 = BaseCommonApi::getDeviceMeasureEquipmentCatory(selectTaskList[0].sample_id); 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); connectList.append(info); addrList.clear(); } idList.clear(); } if(programInfo.standard_device_id!=""){ idList = programInfo.standard_device_id.split(","); for(const QString& id : idList) { if(id!=sId) continue; ConnectInfo info; info.id = id; info.type = 1; info.state="未连接"; 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.deviceName)); ui->tableWidget_Standard->setItem(row, 1, 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.deviceName)); ui->tableWidget_3->setItem(row, 1, new QTableWidgetItem(info.state)); //设置数据 row++; } ui->tableWidget_3->selectRow(0); } void CheckWindow::showCheck() { deleteItem(ui->horizontalLayout_14); int idx=0; for (const Dept& task : selectTaskList) { 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,task,idx]() { on_deviceButton_clicked(task,idx); }); ui->horizontalLayout_14->addWidget(btn_1); idx++; } on_deviceButton_clicked(selectTaskList[0],0); ui->horizontalLayout_14->addStretch(); if(selectTaskList.length()>0) { //QStringList idList=programInfo.tested_device_id.split(","); QString deviceId = selectTaskList[0].sample_id; QList<JudgeCalibrationTable> CliTable = BaseCommonApi::getJudgeCalibrationTable(deviceId); if(CliTable.length()>0){ iEquipType = CliTable[0].belong_standard_equipment.toInt(); } //QStringList headlist; headList.clear(); calibrationList.clear(); headTableList.clear(); //calibrationList =BaseCommonApi::Search_CalibrationTable(deviceId,&headList); caliDataList = BaseCommonApi::Search_CalibrationTableClass(deviceId,&headTableList); //tableWidgetItem 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; 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); if(i==0) ui->tableWidget_Point->setItem(row, 0, new QTableWidgetItem(dataRes[i][1])); ui->tableWidget_Point->setItem(row, 1, new QTableWidgetItem(dataRes[i][5])); ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1")); row++; } // ======================================================================================== // 按钮设置显示 // ==================================================================================== QPushButton *button = new QPushButton(sLabel, this); //设置样式 // 设置按钮大小为 56x20 button->setFixedSize(85, 40); button->setCheckable(true); button->setAutoExclusive(true); //设置第一个按钮选中状态 if(index==0){ button->setChecked(true);} //button->setc(true); // 设置按钮样式表 button->setStyleSheet("QPushButton {" "border: 1px solid white;" // 白色边框 "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 "background-color: rgba(242, 242, 242, 1);" // 浅灰色背景 "}" "QPushButton:hover {" "background-color: rgba(215, 215, 215, 1);;" // 鼠标悬停时变为深灰色背景 "}" "QPushButton:checked {" "color: white;" "background-color: rgb(74, 102, 186);" // 选中时变为蓝色背景 "}"); ui->HeadListLayout->addWidget(button); connect(button, &QPushButton::clicked, this, [this,index]() { //tackedWidget->setCurrentIndex(index); initCheckTable(index); }); ++index; } ui->HeadListLayout->addStretch(); } ui->stackedWidget_2->setCurrentIndex(1); initCheckTable(0); } void CheckWindow::on_deviceButton_clicked(Dept task,int idx) { 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(task.sample_name)); ui->label_22->setText(QString("型号规格: %1").arg(task.sample_model)); ui->label_23->setText(QString("出厂编号: %1").arg(task.manufacture_no)); ui->label_24->setText(QString("生产厂家: %1").arg(task.manufacturer)); } 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() { 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(&caliDataList,&headTableList,standardId); 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]); } } } } 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) return; curHeadIdx = idx; QString sLabel = headTableList.keys()[curHeadIdx]; const auto &dataRes = caliDataList.value(sLabel); const auto &headrs = headTableList.value(sLabel); ui->tableWidgetCheck->clearContents(); ui->tableWidgetCheck->setRowCount(0); ui->tableWidgetCheck->setColumnCount(0); 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++) { ui->tableWidgetCheck->setItem(i, j, new QTableWidgetItem(dataRes[i][j])); } } } void CheckWindow::connectDevice(){ if(connectList.length()>0&&connectList[0].type==0) deviceEngine.openDevice(connectList[0].programInterface.visa,"Visa"); if(connectList.length()>1&&connectList[1].type==1) standardEngine.openDevice(connectList[1].programInterface.visa,"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,QString sName){ const auto &headrs = headTableList.value(sLabel); for(int i=0;i<headrs.length();i++){ if(headrs[i]==sName) return i; } return -1; } double CheckWindow::transUnit(QString sData,QString sUnit,bool reverse){ double dTmp = sData.toDouble(); QString unit = sUnit.toUpper(); if(unitTransList.contains(unit)){ if(reverse) dTmp/=unitTransList.value(unit); else dTmp*=unitTransList.value(unit); } return dTmp; } QString CheckWindow::transCmd(QString sCmd,QString sLabel,QStringList data) { QString sNewCmd = sCmd; if(sNewCmd.contains("DELAY:")){ int sTart = sNewCmd.indexOf(":"); int delay = sNewCmd.mid(sTart+1,sNewCmd.length()-1-sTart).toInt(); qDebug() << "delay time:" << delay; Delay_MSec(delay); return ""; } for (QString key : cmdPlaceHolderList.keys()) { if(sCmd.contains(key)){ int idx= getIndexByHeader(sLabel,cmdPlaceHolderList.value(key)); if(idx!=-1){ int idx2= getIndexByHeader(sLabel,"单位"); QString unit = data[idx2]; double dTmp = transUnit(data[idx],unit,true); sNewCmd = sNewCmd.replace(key,QString::number(dTmp)); } } } return sNewCmd; } void CheckWindow::on_pushButton_start_clicked() { connectDevice(); for(int i=0;i<headTableList.keys().length();i++) { initCheckTable(i); QString sLabel = headTableList.keys()[i]; QList<QStringList> dataRes = caliDataList.value(sLabel); for (int i = 0; i < dataRes.count(); ++i) { QString sRet=""; QString newCmd; double dStdValue,dError; //标准器输出 int idx= getIndexByHeader(sLabel,"检定项目"); QString sParam = dataRes[i][idx]; if(standardEngine.getState()){ InstructionLib *instrcutLib = getCmdByCheckName(1,sParam); if(instrcutLib!=nullptr){ QStringList sList = instrcutLib->instruct_config.split(";"); if(sList.length()>0){ for (QString& sCmd : sList){ newCmd = transCmd(sCmd,sLabel,dataRes[i]); if(newCmd!=""){ standardEngine.sendData(newCmd); qDebug() << "standard cmds:" << newCmd; } } } } } //被检设备读数 // InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); if(deviceEngine.getState()){ InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); if(instrcutLib!=nullptr){ QStringList sList = instrcutLib->instruct_config.split(";"); if(sList.length()>0){ for (QString& sCmd : sList){ newCmd = transCmd(sCmd,sLabel,dataRes[i]); if(newCmd!=""){ deviceEngine.sendData(newCmd); qDebug() << "config cmds:" << newCmd; } } } Delay_MSec(2000); newCmd = transCmd(instrcutLib->instruct_read,sLabel,dataRes[i]); if(newCmd!=""){ qDebug() << "query cmds:" << newCmd; sRet = deviceEngine.queryData(newCmd); idx= getIndexByHeader(sLabel,"单位"); dStdValue = transUnit(sRet,dataRes[i][idx]); } } } // if(sRet==""){ bool bOk = false; dStdValue = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); if (bOk) { sRet = QString::number(dStdValue); //idx= getIndexByHeader(sLabel,"单位"); //dStdValue = transUnit(sRet,dataRes[i][idx]); //sRet = QString::number(dStdValue); } } //item.measure_indication_value = sRet; if(iEquipType==1){ idx= getIndexByHeader(sLabel,"示值"); dataRes[i][idx] = QString::number(dStdValue); ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dStdValue))); //示值 idx= getIndexByHeader(sLabel,"标准值"); double dTmp = dataRes[i][idx].toDouble(); dError = dStdValue-dTmp; idx= getIndexByHeader(sLabel,"绝对误差"); dataRes[i][idx] = QString::number(dError); ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(QString::number(dError))); //示值 } //ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); } caliDataList.insert(sLabel,dataRes); } // initCheckTable(); // for(int i=0;i<measureCalList.length();i++) // { // SaveDeviceMeasureCalibrator& item = measureCalList[i]; // QString sRet=""; // //标准器输出 // if(standardEngine.getState()){ // InstructionLib *instrcutLib = getCmdByCheckName(1,item.params); // if(instrcutLib!=nullptr){ // QStringList sList = instrcutLib->instruct_config.split(";"); // if(sList.length()>0){ // for (QString& sCmd : sList){ // standardEngine.sendData(sCmd); // } // } // } // } // //被检设备读数 // if(deviceEngine.getState()){ // InstructionLib *instrcutLib = getCmdByCheckName(0,item.params); // if(instrcutLib!=nullptr){ // QStringList sList = instrcutLib->instruct_config.split(";"); // if(sList.length()>0){ // for (QString& sCmd : sList){ // deviceEngine.sendData(sCmd); // } // } // Delay_MSec(2000); // sRet = deviceEngine.queryData(instrcutLib->instruct_read); // } // } // // // if(sRet==""){ // bool bOk = false; // double dRet = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,1,&bOk); // if (bOk) { // sRet = QString::number(dRet); // } // } // item.measure_indication_value = sRet; // ui->tableWidgetCheck->setItem(i,15,new QTableWidgetItem(sRet)); //示值 // ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); // } } void CheckWindow::Delay_MSec(unsigned int msec) { QTime _Timer = QTime::currentTime().addMSecs(msec); while( QTime::currentTime() < _Timer ) QCoreApplication::processEvents(QEventLoop::AllEvents, 100); } void CheckWindow::on_pushButton_pause_clicked() { } void CheckWindow::on_pushButton_stop_clicked() { } 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, "警告", "保存失败!"); } } }