#include "verifywindow.h" #include "ui_verifywindow.h" #include <QMessageBox> #include <QInputDialog> #include "newverifymethod.h" VerifyWindow::VerifyWindow(QWidget *parent) : QWidget(parent), ui(new Ui::VerifyWindow) { ui->setupUi(this); 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); getVerifyMethod(); } VerifyWindow::~VerifyWindow() { programList.clear(); delete ui; } void VerifyWindow::getVerifyMethod() { programList.clear(); programList = BaseCommonApi::getCheckProgramManage(); ui->tableWidgetMethod->clearContents(); ui->tableWidgetMethod->setRowCount(0); int rowCount = 0; int row=0; QString sFilterName = ui->lineEdit_9->text(); QString sFilterUser = ui->lineEdit_10->text(); for(int i=programList.length()-1;i>=0;i--){ bool bAdd=true; if(sFilterName!=""&&!programList[i].check_name.contains(sFilterName)){ bAdd=false; } if(sFilterUser!=""&&!programList[i].create_name.contains(sFilterUser)){ bAdd=false; } if(!bAdd){ programList.removeAt(i); } } for (const CheckProgramManage& program : programList) { rowCount = ui->tableWidgetMethod->rowCount(); ui->tableWidgetMethod->insertRow(rowCount); QTableWidgetItem* p_check = new QTableWidgetItem(); p_check->setCheckState(Qt::Unchecked); //设置首列为 CheckBox 控件 ui->tableWidgetMethod->setItem(row,0,p_check); ui->tableWidgetMethod->setItem(row, 1, new QTableWidgetItem(program.check_name)); //设置数据 ui->tableWidgetMethod->setItem(row, 2, new QTableWidgetItem(program.create_name)); //设置数据 ui->tableWidgetMethod->setItem(row, 3, new QTableWidgetItem(program.create_time.toString("yyyy-MM-dd"))); //设置数据 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 VerifyWindow::showDevice() { 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::getCheckProgramManageById(sId); initDeviceInfo(); ui->stackedWidget->setCurrentIndex(1); } } void VerifyWindow::initDeviceInfo() { 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); QStringList idList; int rowCount=0; int row=0; connectList.clear(); if(programInfo.standard_device_id!="") { idList = programInfo.standard_device_id.split(","); for(const QString& id : idList) { ConnectInfo info; info.state="未连接"; info.type = 1; QList<CatDeviceInfor> result = BaseCommonApi::getCatDeviceInfor(id); if(result.length()>0){ info.deviceName = result[0].equipment_name; } 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(); } if(programInfo.verification_documents_id!=""){ idList = programInfo.verification_documents_id.split(","); for(const QString& id : idList) { ConnectInfo info; info.state="未连接"; info.type = 0; CheckAndTestedDevice result = BaseCommonApi::getCheckAndTestedDeviceById(id); info.deviceName = result.equipment_name; 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(); } 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 VerifyWindow::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; NewVerifyMethod* checkWindow = new NewVerifyMethod(nullptr,sId,false); //checkWindow->verifyManageWnd=nullptr; checkWindow->setWindowState(Qt::WindowMaximized); checkWindow->setWindowModality(Qt::ApplicationModal); checkWindow->show(); } void VerifyWindow::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 VerifyWindow::on_tableWidget_3_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn) { if(currentRow>=0&¤tRow<connectList.length()){ 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 VerifyWindow::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 VerifyWindow::on_deviceButton_clicked(CatDeviceInfor info,int idx) { for(int i=0;i<catDeviceList.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(info.equipment_name)); ui->label_22->setText(QString("型号规格: %1").arg(info.model)); ui->label_23->setText(QString("出厂编号: %1").arg(info.manufacture_no)); ui->label_24->setText(QString("生产厂家: %1").arg(info.manufacturer)); } void VerifyWindow::on_pushButton_13_clicked() { deleteItem(ui->horizontalLayout_14); int idx=0; catDeviceList.clear(); QString standardId=""; if(programInfo.standard_device_id!="") { QStringList idList = programInfo.standard_device_id.split(","); for(const QString& id : idList) { standardId = id; QList<CatDeviceInfor> result = BaseCommonApi::getCatDeviceInfor(id); if(result.length()>0){ CatDeviceInfor info = result[0]; catDeviceList.append(info); QPushButton *btn_1 = new QPushButton(); btn_1->setText(info.equipment_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,info,idx]() { on_deviceButton_clicked(info,idx); }); ui->horizontalLayout_14->addWidget(btn_1); idx++; } result.clear(); } idList.clear(); } on_deviceButton_clicked(catDeviceList[0],0); ui->horizontalLayout_14->addStretch(); if(catDeviceList.length()>0) { headList.clear(); calibrationList.clear(); calibrationList =BaseCommonApi::Search_VerifyTable(standardId,&headList); //tableWidgetItem ui->tableWidget_Point->clearContents(); ui->tableWidget_Point->setRowCount(0); //循环数据 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++; } } ui->stackedWidget_2->setCurrentIndex(1); } void VerifyWindow::initCheckTable() { 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++) { if(k<item.length()) ui->tableWidgetCheck->setItem(row, k, new QTableWidgetItem(item[k])); } StandCheckDataCalibrator 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(connectList.length()>0&&connectList[0].type==1) standardEngine.openDevice(connectList[0].programInterface.visa,"Visa"); if(connectList.length()>1&&connectList[1].type==0) deviceEngine.openDevice(connectList[1].programInterface.visa,"Visa"); } InstructionLib* VerifyWindow::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; } void VerifyWindow::Delay_MSec(unsigned int msec) { QTime _Timer = QTime::currentTime().addMSecs(msec); while( QTime::currentTime() < _Timer ) QCoreApplication::processEvents(QEventLoop::AllEvents, 100); } void VerifyWindow::on_pushButton_start_clicked() { initCheckTable(); for(int i=0;i<measureCalList.length();i++) { StandCheckDataCalibrator& 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.test_value_one = sRet; ui->tableWidgetCheck->setItem(i,19,new QTableWidgetItem(sRet)); } } void VerifyWindow::on_pushButton_pause_clicked() { } void VerifyWindow::on_pushButton_stop_clicked() { } void VerifyWindow::on_pushButton_save_clicked() { } void VerifyWindow::on_pushButton_close_clicked() { ui->stackedWidget_2->setCurrentIndex(0); ui->stackedWidget->setCurrentIndex(0); getVerifyMethod(); } void VerifyWindow::on_pushButton_12_clicked() { showDevice(); } void VerifyWindow::on_pushButton_10_clicked() { getVerifyMethod(); } void VerifyWindow::on_pushButton_11_clicked() { ui->lineEdit_9->setText(""); ui->lineEdit_10->setText(""); getVerifyMethod(); }