#include "ToolDialog.h" #include #include #include #include #include #include "toolinterface.h" ToolDialogImpl::ToolDialogImpl(QWidget* parent, DllTool* pDllTool) : DllToolDialog(parent) { ui.setupUi(this); this->setWindowFlags(Qt::Dialog | Qt::WindowMaximizeButtonHint | Qt::WindowCloseButtonHint /*| Qt::WindowStaysOnTopHint*/); connect(this, SIGNAL(sigUpdateUI()), this, SLOT(on_UpdateUI())/*,Qt::QueuedConnection*/); // 显示控件初始化 hwndUnit = new HWndUnit(this); Util::ShowUnitInWidget(ui.Image_widget, hwndUnit); hwndUnit->getHWndCtrl()->useROIController(&roiController); connect(&roiController, SIGNAL(ROIChange(const ViewMessage)), this, SLOT(on_ROIChange(const ViewMessage))); ROIRect1* roi = new ROIRect1(); roi->setTitle("搜索区域"); roiController.setROISign(ROIOperation::Negative); roiController.setROIShape(roi); roiController.mouseDownAction(500, 500); QString strPath = QCoreApplication::applicationDirPath() + "/Test.jpg"; try { m_Image.ReadImage(strPath.toStdString().c_str()); hwndUnit->ShowImage(m_Image); hwndUnit->Refresh(false); } catch (...) { } ////////////////////////////////////////////////////////////////////////// m_bLoading = false; m_nModes = 1; m_min = 10; m_max = 200; m_nWidth = 50; m_nHeight = 50; m_nOffset = 1; ui.comboBox_select->setView(new QListView()); ui.comboBox->setView(new QListView()); ui.horizontalSlidermin->setMinimum(0); ui.horizontalSlidermin->setMaximum(255); ui.horizontalSlidermin->setSingleStep(1); ui.horizontalSlidermax->setMinimum(0); ui.horizontalSlidermax->setMaximum(255); ui.horizontalSlidermax->setSingleStep(1); ui.horizontalSlidermin->setValue(m_min); ui.horizontalSlidermax->setValue(m_max); ui.lineEdit_Width->setText(QString::number(m_nWidth) ); ui.lineEdit_Height->setText(QString::number(m_nHeight)); ui.lineEdit_Offset->setText(QString::number(m_nOffset)); ui.lineEdit_Width->setValidator(new QIntValidator(1, 16777215, this)); ui.lineEdit_Height->setValidator(new QIntValidator(1, 16777215, this)); ui.lineEdit_Offset->setValidator(new QIntValidator(1, 16777215, this)); ui.tableWidget->verticalHeader()->setVisible(false); ui.tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); ui.tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); ui.tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); ui.tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); ui.tableWidget->setShowGrid(false); ui.tableWidget->setFocusPolicy(Qt::NoFocus); ui.tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); ui.tableWidget_Feature->verticalHeader()->setVisible(false); ui.tableWidget_Feature->setColumnWidth(0, 50); ui.tableWidget_Feature->setColumnWidth(1, 120); for (int i = 2; i < 11; i++) { ui.tableWidget_Feature->setColumnWidth(i, 90); } ui.tableWidget_Feature->setShowGrid(false); ui.tableWidget_Feature->setFocusPolicy(Qt::NoFocus); ui.tableWidget_Feature->setSelectionBehavior(QAbstractItemView::SelectRows); ui.tableWidget_Feature->horizontalHeader()->setSectionsClickable(false); ui.tableWidget_Feature->setEditTriggers(QAbstractItemView::NoEditTriggers); ui.checkBox->setChecked(true); ui.checkBox_paixu->setChecked(true); QMenu* menu = new QMenu(); QMenu* region = menu->addMenu("区域操作"); region->addAction("连通", this, SLOT(ActionSlot())); region->addAction("合并", this, SLOT(ActionSlot())); region->addAction("补集", this, SLOT(ActionSlot())); region->addAction("相减", this, SLOT(ActionSlot())); region->addAction("相交", this, SLOT(ActionSlot())); region->addAction("孔洞填充", this, SLOT(ActionSlot())); QMenu* xingtaixue = menu->addMenu("形态学"); xingtaixue->addAction("闭运算", this, SLOT(ActionSlot())); xingtaixue->addAction("开运算", this, SLOT(ActionSlot())); xingtaixue->addAction("腐蚀", this, SLOT(ActionSlot())); xingtaixue->addAction("膨胀", this, SLOT(ActionSlot())); QMenu* gaoji = menu->addMenu("高级操作"); gaoji->addAction("特征筛选", this, SLOT(ActionSlot())); gaoji->addAction("转换", this, SLOT(ActionSlot())); gaoji->addAction("矩形分割", this, SLOT(ActionSlot())); gaoji->addAction("动态分割", this, SLOT(ActionSlot())); ui.btnAdd->setMenu(menu); } ToolDialogImpl::~ToolDialogImpl() { } VPEnum::RETURN_VALUE ToolDialogImpl::Execute() { try { hwndUnit->ShowImage(m_Image); try { if (m_nModes == 1) { ThresholdTool(); } if (m_nModes == 2) { DynThresholdTool(); } HObject ImageTemp; ImageTemp = m_TempImage; //DispObj(m_Image, HalconID); for (int i = 0; i < m_LinkProcess.size(); i++) { if (m_LinkProcess[i].p_dlg != nullptr && m_LinkProcess[i].isrun == true) { m_LinkProcess[i].p_dlg->setValue(ImageTemp); m_LinkProcess[i].p_dlg->Execute(); ImageTemp = m_LinkProcess[i].p_dlg->GetResult(); } } m_OutImage = ImageTemp; ShowFeature(m_OutImage); hwndUnit->ShowImage(m_Image); hwndUnit->ShowObj(m_OutImage, true); } catch (...) { } //hwndUnit->ShowObj(m_objROI, qRgb(255, 0, 0), 2); //hwndUnit->ShowMsg((HTuple)"msg", qRgb(255, 0, 0), 10, 10, 200); hwndUnit->Refresh(true); } catch (...) { qWarning() << "Execute() Error"; } emit sigUpdateUI(); return VPEnum::RETURN_VALUE::Success; } void ToolDialogImpl::on_ROIChange(const ViewMessage& sign) { switch (sign) { case ViewMessage::MovingROI: { ROI* roi = roiController.getActiveROI(); hv_roiDate = roi->getROIData(); try { GenRectangle1(&m_objROI, hv_roiDate[0], hv_roiDate[1], hv_roiDate[2], hv_roiDate[3]); } catch (...) { } } case ViewMessage::UpdateROI: case ViewMessage::CreatedROI: { roiController.defineModelROI(); ROI* roi = roiController.getActiveROI(); hv_roiDate = roi->getROIData(); try { GenRectangle1(&m_objROI, hv_roiDate[0], hv_roiDate[1], hv_roiDate[2], hv_roiDate[3]); } catch (...) { } } break; default: break; } } /// /// /// /// void ToolDialogImpl::Running(bool bRun) { } /// /// /// /// /// /// bool ToolDialogImpl::Serialized(QDataStream& ar, bool bIsOut) { int paranum;//参数数量 if (bIsOut)//保存参数流程 { paranum = 12; ar << paranum;//先保存参数数量 ar << (int)1 << hv_roiDate; ar << (int)2 << m_Image; ar << (int)3 << roiController; ar << (int)4 << m_objROI; ar << (int)5 << m_nWidth; ar << (int)6 << m_nHeight; ar << (int)7 << m_nOffset; ar << (int)8 << m_nType; ar << (int)9 << m_min; ar << (int)10 << m_max; ar << (int)11 << m_nModes; ar << (int)12 << ui.comboBox_select->currentIndex(); paranum = 2;//以下参数的数量 ar << paranum;//先保存参数数量 ar << (UINT)m_LinkProcess.size(); for (UINT i = 0; i < m_LinkProcess.size(); i++) { LINKCTRL& link = m_LinkProcess[i]; ar << (int)1 << link.ToolName; ar << (int)2 << link.ToolID; } // 保存工具内的参数 for (UINT i = 0; i < m_LinkProcess.size(); i++) { m_LinkProcess[i].p_dlg->Serialized(ar, true); } } else//加载参数流程,参数加载顺序一定要跟保存顺序一致 { m_bLoading = true; int nCurrentIndex = 0; int nSize1 = 0; int para; ar >> paranum;//读取参数数量 for (int i = 0; i < paranum; i++) { ar >> para; switch (para) { case 1: ar >> hv_roiDate; break; case 2: ar >> m_Image; break; case 3: ar >> roiController; break; case 4: ar >> m_objROI; break; case 5: ar >> m_nWidth; break; case 6: ar >> m_nHeight; break; case 7: ar >> m_nOffset; break; case 8: ar >> m_nType; break; case 9: ar >> m_min; break; case 10: ar >> m_max; break; case 11: ar >> m_nModes; break; case 12: ar >> nCurrentIndex; break; default: { qWarning() << "Serialized(In) Error"; return false; } break; } } { { ui.horizontalSlidermin->setValue(m_min); ui.horizontalSlidermax->setValue(m_max); ui.comboBox_select->setCurrentIndex(nCurrentIndex); ui.lineEdit_Width->setText(QString::number(m_nWidth)); ui.lineEdit_Height->setText(QString::number(m_nHeight)); ui.lineEdit_Offset->setText(QString::number(m_nOffset)); //emit updateParameter(ShowParameter()); } m_LinkProcess.clear(); ui.tableWidget->clear(); for (int i = ui.stackedWidget->count(); i >= 0; i--) { QWidget* widget = ui.stackedWidget->widget(i); ui.stackedWidget->removeWidget(widget); } } UINT LinkSize = 0; ar >> paranum;//读取参数数量 ar >> LinkSize; for (UINT i = 0; i < LinkSize; i++) { int nToolID = 0; QString strToolName; int nPpara; for (int j = 0; j < paranum; j++) { ar >> nPpara; switch (nPpara) { case 1: ar >> strToolName; break; case 2: ar >> nToolID; break; default: return false; } } AddTool(nToolID); } // 加载工具内的参数 for (UINT i = 0; i < m_LinkProcess.size(); i++) { m_LinkProcess[i].p_dlg->Serialized(ar, false); } m_bLoading = false; } return true; } void ToolDialogImpl::on_UpdateUI() { } /// /// 确定 /// void ToolDialogImpl::on_btnOK_clicked() { this->hide(); } /// /// 取消按钮 /// void ToolDialogImpl::on_btnCancel_clicked() { // 将本工具的恢复到打开工具之前的状态 RecoverData(); } /// /// 测试按钮 /// void ToolDialogImpl::on_btnExecute_clicked() { QElapsedTimer toolTimer; toolTimer.start(); // 发送事件 ToolEvent* pToolEvent = new ToolEvent(m_strPouName, m_strInstanceName, TOOL_EVENT_TYPE::TOOL_TRIGGER); QCoreApplication::sendEvent(m_pEventTarget, pToolEvent); // 统计返回值 VPEnum::RETURN_VALUE ret = pToolEvent->ret; double nExecTime = toolTimer.elapsed(); QString str; str = QString("耗时: %1 ms").arg(nExecTime, 0, 'G', 5); ui.label_time->setText(str); str = QString("状态: %1 ").arg(QMetaEnum::fromType().key((short)ret)); ui.label_state->setText(str); delete pToolEvent; } void ToolDialogImpl::ActionSlot() { if (m_bLoading) { return; } QAction* action = (QAction*)sender(); if (action->text() == "连通") { AddTool(0); } if (action->text() == "合并") { AddTool(1); } if (action->text() == "补集") { AddTool(2); } if (action->text() == "相减") { AddTool(3); } if (action->text() == "相交") { AddTool(4); } if (action->text() == "孔洞填充") { AddTool(5); } if (action->text() == "闭运算") { AddTool(6); } if (action->text() == "开运算") { AddTool(7); } if (action->text() == "腐蚀") { AddTool(8); } if (action->text() == "膨胀") { AddTool(9); } if (action->text() == "特征筛选") { AddTool(10); } if (action->text() == "转换") { AddTool(11); } if (action->text() == "矩形分割") { AddTool(12); } if (action->text() == "动态分割") { AddTool(13); } } void ToolDialogImpl::clickSlot(bool ok) { QCheckBox* cb = (QCheckBox*)sender(); m_LinkProcess[cb->objectName().toInt()].isrun = ok; if (ui.checkBox->isChecked()) { //Execute(); } } void ToolDialogImpl::AddTool(int nToolID) { if (nToolID == -1) { return; } ToolInterface* pDlg = nullptr; LINKCTRL aLinkCtrl; QString strToolName; if (nToolID == 0) { strToolName = "连通"; pDlg = new BlobConnection(nullptr, this); } if (nToolID == 1) { strToolName = "合并"; pDlg = new BlobUnion(nullptr, this); } if (nToolID == 2) { strToolName = "补集"; pDlg = new BlobComplement(nullptr, this); } if (nToolID == 3) { strToolName = "相减"; pDlg = new BlobDifference(nullptr, this); } if (nToolID == 4) { strToolName = "相交"; pDlg = new BlobIntersection(nullptr, this); } if (nToolID == 5) { strToolName = "孔洞填充"; pDlg = new BlobFillUp(nullptr, this); } if (nToolID == 6) { strToolName = "闭运算"; pDlg = new BlobClose(nullptr, this); } if (nToolID == 7) { strToolName = "开运算"; pDlg = new BlobOpen(nullptr, this); } if (nToolID == 8) { strToolName = "腐蚀"; pDlg = new BlobErosion(nullptr, this); } if (nToolID == 9) { strToolName = "膨胀"; pDlg = new BlobDilation(nullptr, this); } if (nToolID == 10) { strToolName = "特征筛选"; pDlg = new BlobSelectShape(nullptr, this); } if (nToolID == 11) { strToolName = "转换"; pDlg = new BolbShapeTrans(nullptr, this); } if (nToolID == 12) { strToolName = "矩形分割"; pDlg = new BlobPartitionRectangle(nullptr, this); } if (nToolID == 13) { strToolName = "动态分割"; pDlg = new BlobPartitionDynamic(nullptr, this); } connect(pDlg, SIGNAL(updateParameter(QString)), this, SLOT(UpdateUI(QString))); connect(pDlg, SIGNAL(updateParameterIndex(QString)), this, SLOT(UpdateUiIndex(QString))); ui.tableWidget->addTool(m_LinkProcess.size(), strToolName, pDlg->ShowParameter()); ui.tableWidget->selectRow(m_LinkProcess.size()); ui.stackedWidget->insertWidget(m_LinkProcess.size(), pDlg); ui.stackedWidget->setCurrentIndex(m_LinkProcess.size()); aLinkCtrl.ToolID = nToolID; aLinkCtrl.p_dlg = pDlg; aLinkCtrl.ToolName = strToolName; aLinkCtrl.isrun = true; aLinkCtrl.nUi = m_LinkProcess.size(); m_LinkProcess.push_back(aLinkCtrl); if (ui.checkBox->isChecked()) { //Execute(); } } void ToolDialogImpl::UpdateUI(QString name) { if (ui.checkBox->isChecked()) { int rowIndex = ui.tableWidget->currentRow(); if (rowIndex != -1) { //ui.tableWidget->setItem(ui.tableWidget->currentRow(), 2, new QTableWidgetItem("")); ui.tableWidget->item(ui.tableWidget->currentRow(), 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui.tableWidget->setItem(ui.tableWidget->currentRow(), 4, new QTableWidgetItem(name)); ui.tableWidget->item(ui.tableWidget->currentRow(), 4)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); } try { //Execute(); } catch (...) { qWarning() << "Error"; } } } void ToolDialogImpl::UpdateUiIndex(QString name) { ui.tableWidget->setItem(ui.tableWidget->currentRow(), 2, new QTableWidgetItem(name)); ui.tableWidget->item(ui.tableWidget->currentRow(), 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui.tableWidget->item(ui.tableWidget->currentRow(), 4)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); } void ToolDialogImpl::on_tableWidget_clicked(const QModelIndex& index) { int nRow = index.row(); LINKCTRL& aLink1 = m_LinkProcess.at(nRow); ui.stackedWidget->setCurrentIndex(aLink1.nUi); int dd = ui.stackedWidget->count(); } void ToolDialogImpl::on_btnDel_clicked() { } void ToolDialogImpl::SwapTwoRow(int selectRow, int targetRow) { QString text1 = ui.tableWidget->item(selectRow, 1)->text(); QString text2 = ui.tableWidget->item(selectRow, 2)->text(); QString text3 = ui.tableWidget->item(targetRow, 1)->text(); QString text4 = ui.tableWidget->item(targetRow, 2)->text(); ui.tableWidget->setItem(selectRow, 1, new QTableWidgetItem(text3)); ui.tableWidget->setItem(selectRow, 2, new QTableWidgetItem(text4)); ui.tableWidget->setItem(targetRow, 1, new QTableWidgetItem(text1)); ui.tableWidget->setItem(targetRow, 2, new QTableWidgetItem(text2)); ui.tableWidget->item(selectRow, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui.tableWidget->item(selectRow, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui.tableWidget->item(targetRow, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui.tableWidget->item(targetRow, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui.tableWidget->selectRow(targetRow); } void ToolDialogImpl::on_btnMoveUp_clicked() { if (ui.tableWidget->currentRow() != -1 && ui.tableWidget->currentRow() > 0) { int nRow = ui.tableWidget->currentRow(); //swap(m_LinkProcess.at(nRow), m_LinkProcess.at(nRow - 1));//向上交换处理模块位置 LINKCTRL aLink1 = m_LinkProcess.at(nRow - 1); ui.stackedWidget->setCurrentIndex(aLink1.nUi); this->SwapTwoRow(nRow, nRow - 1); } } void ToolDialogImpl::on_btnMoveDown_clicked() { int a = ui.tableWidget->currentRow(); int b = ui.tableWidget->rowCount(); if (ui.tableWidget->currentRow() != -1 && ui.tableWidget->currentRow() < ui.tableWidget->rowCount() - 1) { int nRow = ui.tableWidget->currentRow(); //swap(m_LinkProcess.at(nRow), m_LinkProcess.at(nRow + 1));//向下交换处理模块位置 LINKCTRL aLink1 = m_LinkProcess.at(nRow + 1); ui.stackedWidget->setCurrentIndex(aLink1.nUi); this->SwapTwoRow(nRow, nRow + 1); } } void ToolDialogImpl::on_horizontalSlidermin_valueChanged(int value) { ui.labelmin->setText(QString::number(value)); m_min = ui.horizontalSlidermin->value(); } void ToolDialogImpl::on_horizontalSlidermax_valueChanged(int value) { ui.labelmax->setText(QString::number(value)); m_max = ui.horizontalSlidermax->value(); } void ToolDialogImpl::on_checkBox_invert_clicked() { ThresholdTool(); } void ToolDialogImpl::ThresholdTool() { m_nModes = 1; try { if (m_max > m_min) { if (m_Image.IsInitialized()) { HObject ImageTemp; ImageTemp = m_Image; Rgb1ToGray(ImageTemp, &ImageTemp); Threshold(ImageTemp, &ImageTemp, m_min, m_max); if (ui.checkBox_invert->isChecked()) { Complement(ImageTemp, &ImageTemp); } m_TempImage = ImageTemp; } } } catch (...) { } } void ToolDialogImpl::DynThresholdTool() { m_nModes = 2; m_nWidth = ui.lineEdit_Width->text().toInt(); m_nHeight = ui.lineEdit_Height->text().toInt(); int Offset = ui.lineEdit_Offset->text().toInt(); m_nType = ui.comboBox_select->currentIndex(); try { if (m_Image.IsInitialized()) { HObject ImageTemp; HObject ImageResult; ImageTemp = m_Image; Rgb1ToGray(ImageTemp, &ImageTemp); //DispObj(ImageTemp, HalconID); hwndUnit->ShowObj(ImageTemp, true); hwndUnit->Refresh(); MeanImage(ImageTemp, &ImageResult, m_nWidth, m_nHeight); if (m_nType == 0) { DynThreshold(ImageTemp, ImageResult, &ImageResult, Offset, "light"); } if (m_nType == 1) { DynThreshold(ImageTemp, ImageResult, &ImageResult, Offset, "dark"); } if (m_nType == 2) { DynThreshold(ImageTemp, ImageResult, &ImageResult, Offset, "equal"); } if (m_nType == 3) { DynThreshold(ImageTemp, ImageResult, &ImageResult, Offset, "not_equal"); } m_TempImage = ImageResult; } } catch (...) { } } void ToolDialogImpl::on_BTN_Add1_clicked() { ui.lineEdit_Width->setText(QString::number(ui.lineEdit_Width->text().toInt() + 1)); DynThresholdTool(); } void ToolDialogImpl::on_BTN_Sub1_clicked() { if (ui.lineEdit_Width->text().toInt() >= 2) { ui.lineEdit_Width->setText(QString::number(ui.lineEdit_Width->text().toInt() - 1)); } DynThresholdTool(); } void ToolDialogImpl::on_BTN_Add2_clicked() { ui.lineEdit_Height->setText(QString::number(ui.lineEdit_Height->text().toInt() + 1)); DynThresholdTool(); } void ToolDialogImpl::on_BTN_Sub2_clicked() { if (ui.lineEdit_Height->text().toInt() >= 2) { ui.lineEdit_Height->setText(QString::number(ui.lineEdit_Height->text().toInt() - 1)); } DynThresholdTool(); } void ToolDialogImpl::on_BTN_Add3_clicked() { ui.lineEdit_Offset->setText(QString::number(ui.lineEdit_Offset->text().toInt() + 1)); DynThresholdTool(); } void ToolDialogImpl::on_BTN_Sub3_clicked() { if (ui.lineEdit_Offset->text().toInt() >= 2) { ui.lineEdit_Offset->setText(QString::number(ui.lineEdit_Offset->text().toInt() - 1)); } DynThresholdTool(); } void ToolDialogImpl::on_lineEdit_Width_editingFinished() { DynThresholdTool(); } void ToolDialogImpl::on_lineEdit_Height_editingFinished() { DynThresholdTool(); } void ToolDialogImpl::on_lineEdit_Offset_editingFinished() { DynThresholdTool(); } void ToolDialogImpl::ShowFeature(HObject ho_Region) { HTuple hv_Value1, hv_Value2, hv_Value3, hv_Value4, hv_Value5; HTuple hv_Value6, hv_Value7, hv_Value8, hv_Value9, hv_Value10; HTuple hv_Value11; RegionFeatures(ho_Region, "area", &hv_Value1); RegionFeatures(ho_Region, "row", &hv_Value2); RegionFeatures(ho_Region, "column", &hv_Value3); RegionFeatures(ho_Region, "circularity", &hv_Value4); RegionFeatures(ho_Region, "compactness", &hv_Value5); RegionFeatures(ho_Region, "convexity", &hv_Value6); RegionFeatures(ho_Region, "rectangularity", &hv_Value7); RegionFeatures(ho_Region, "max_diameter", &hv_Value8); RegionFeatures(ho_Region, "width", &hv_Value9); RegionFeatures(ho_Region, "height", &hv_Value10); RegionFeatures(ho_Region, "rect2_phi", &hv_Value11); HTuple Length; TupleLength(hv_Value1, &Length); ui.tableWidget_Feature->clearContents(); for (int i = 0; i < Length.I(); i++) { ui.tableWidget_Feature->setRowCount(i + 1); ui.tableWidget_Feature->setItem(i, 0, new QTableWidgetItem(QString::number(i + 1))); ui.tableWidget_Feature->item(i, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui.tableWidget_Feature->setItem(i, 1, new QTableWidgetItem(QString::number(hv_Value1[i].D(), 'f', 3))); ui.tableWidget_Feature->item(i, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui.tableWidget_Feature->setItem(i, 2, new QTableWidgetItem(QString::number(hv_Value2[i].D(), 'f', 3))); ui.tableWidget_Feature->item(i, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui.tableWidget_Feature->setItem(i, 3, new QTableWidgetItem(QString::number(hv_Value3[i].D(), 'f', 3))); ui.tableWidget_Feature->item(i, 3)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui.tableWidget_Feature->setItem(i, 4, new QTableWidgetItem(QString::number(hv_Value4[i].D(), 'f', 3))); ui.tableWidget_Feature->item(i, 4)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui.tableWidget_Feature->setItem(i, 5, new QTableWidgetItem(QString::number(hv_Value5[i].D(), 'f', 3))); ui.tableWidget_Feature->item(i, 5)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui.tableWidget_Feature->setItem(i, 6, new QTableWidgetItem(QString::number(hv_Value6[i].D(), 'f', 3))); ui.tableWidget_Feature->item(i, 6)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui.tableWidget_Feature->setItem(i, 7, new QTableWidgetItem(QString::number(hv_Value7[i].D(), 'f', 3))); ui.tableWidget_Feature->item(i, 7)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui.tableWidget_Feature->setItem(i, 8, new QTableWidgetItem(QString::number(hv_Value8[i].D(), 'f', 3))); ui.tableWidget_Feature->item(i, 8)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui.tableWidget_Feature->setItem(i, 9, new QTableWidgetItem(QString::number(hv_Value9[i].D(), 'f', 3))); ui.tableWidget_Feature->item(i, 9)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui.tableWidget_Feature->setItem(i, 10, new QTableWidgetItem(QString::number(hv_Value10[i].D(), 'f', 3))); ui.tableWidget_Feature->item(i, 10)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui.tableWidget_Feature->setItem(i, 11, new QTableWidgetItem(QString::number(hv_Value11[i].D(), 'f', 3))); ui.tableWidget_Feature->item(i, 11)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); } } void ToolDialogImpl::on_comboBox_currentIndexChanged(int index) { if (ui.checkBox_paixu->isChecked()) { if (ui.checkBox_shengxu->isChecked()) { ui.tableWidget_Feature->sortItems(ui.comboBox->currentIndex() + 1, Qt::AscendingOrder); } else { ui.tableWidget_Feature->sortItems(ui.comboBox->currentIndex() + 1, Qt::DescendingOrder); } for (int i = 0; i < ui.tableWidget_Feature->rowCount(); i++) { ui.tableWidget_Feature->setItem(i, 0, new QTableWidgetItem(QString::number(i + 1))); ui.tableWidget_Feature->item(i, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); } } } void ToolDialogImpl::on_checkBox_shengxu_clicked() { if (ui.checkBox_paixu->isChecked()) { if (ui.checkBox_shengxu->isChecked()) { ui.tableWidget_Feature->sortByColumn(ui.comboBox->currentIndex() + 1, Qt::AscendingOrder); } else { ui.tableWidget_Feature->sortByColumn(ui.comboBox->currentIndex() + 1, Qt::DescendingOrder); } for (int i = 0; i < ui.tableWidget_Feature->rowCount(); i++) { ui.tableWidget_Feature->setItem(i, 0, new QTableWidgetItem(QString::number(i + 1))); ui.tableWidget_Feature->item(i, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); } } } void ToolDialogImpl::on_checkBox_paixu_clicked() { if (ui.checkBox_paixu->isChecked()) { if (ui.checkBox_shengxu->isChecked()) { ui.tableWidget_Feature->sortByColumn(ui.comboBox->currentIndex() + 1, Qt::AscendingOrder); } else { ui.tableWidget_Feature->sortByColumn(ui.comboBox->currentIndex() + 1, Qt::DescendingOrder); } for (int i = 0; i < ui.tableWidget_Feature->rowCount(); i++) { ui.tableWidget_Feature->setItem(i, 0, new QTableWidgetItem(QString::number(i + 1))); ui.tableWidget_Feature->item(i, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); } } } void ToolDialogImpl::on_comboBox_select_currentIndexChanged(int index) { DynThresholdTool(); }