From dd5eb7f0c2354ab71db31e7f08295a51e9111c8d Mon Sep 17 00:00:00 2001 From: "bob.pan" Date: Sat, 9 Oct 2021 17:46:49 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81valueMain=E4=BF=AE=E5=A4=8DPLC?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E7=8A=B6=E6=80=81=E6=98=BE=E7=A4=BA=E4=B8=8D?= =?UTF-8?q?=E6=AD=A3=E5=B8=B8=E9=97=AE=E9=A2=98=202=E3=80=81=E4=BC=98?= =?UTF-8?q?=E5=8C=96valueMain=E9=95=BF=E6=97=B6=E9=97=B4=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E5=87=BA=E7=8E=B0UI=E6=94=BE=E5=A4=A7=E7=BC=A9=E5=B0=8F?= =?UTF-8?q?=E5=8D=A1=E9=A1=BF=E9=97=AE=E9=A2=98=203=E3=80=81=E6=A0=87?= =?UTF-8?q?=E5=AE=9A=E9=A1=B5=E9=9D=A2=E6=9B=B4=E6=96=B0=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=8C=89=E9=92=AE=E7=A7=BB=E5=8A=A8ROI=E4=BD=8D?= =?UTF-8?q?=E7=BD=AE=EF=BC=8C=E6=94=AF=E6=8C=81=E9=95=BF=E5=AE=89=E7=A7=BB?= =?UTF-8?q?=E5=8A=A8=204=E3=80=81=E6=A0=87=E5=AE=9A=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=8C=E4=BF=AE=E5=A4=8DROI=E5=9B=9B?= =?UTF-8?q?=E4=B8=AA=E7=9E=84=E7=82=B9=E5=9C=A8=E9=BC=A0=E6=A0=87=E6=94=BE?= =?UTF-8?q?=E7=BD=AE=E6=97=B6=E6=98=BE=E7=A4=BA=E6=96=B9=E5=90=91=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=205=E3=80=81=E5=9C=86=E6=8A=A0=E5=9B=BE=E7=AE=97?= =?UTF-8?q?=E6=B3=95=E6=9B=B4=E6=96=B0=206=E3=80=81=E6=A0=87=E5=AE=9A?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2ROI=E6=A0=87=E5=AE=9A=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=EF=BC=8C=E5=8A=A0=E5=85=A5=E9=98=B2=E5=91=86=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=EF=BC=8C=E6=B2=A1=E6=9C=89=E6=A0=87=E5=AE=9A=E5=9B=BE=E6=97=B6?= =?UTF-8?q?=E4=B8=8D=E8=83=BD=E8=BF=9B=E5=85=A5ROI=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lpbdesigner/DrawTool.cpp | 2 +- src/lpbdesigner/DsgAlgoDlg.cpp | 2 +- src/lpbdesigner/DsgParamDlg.cpp | 11 +- src/lpbdesigner/DsgRoiDlg.cpp | 70 ++- src/lpbdesigner/DsgRoiDlg.h | 4 + src/lpbdesigner/MainFrame.cpp | 43 +- src/lpbdesigner/MainFrame.ui | 6 +- src/lpbdesigner/RoiDlg.ui | 613 ++++++++++++------- src/lpbdesigner/RoiItem.cpp | 12 +- src/lpbdesigner/RoiScene.cpp | 26 +- src/lpbdesigner/RoiScene.h | 2 +- src/lpbdesigner/SizeHandle.h | 2 +- src/lpbdesigner/image.qrc | 15 + src/lpbdesigner/resource/arrow-down.png | Bin 0 -> 594 bytes src/lpbdesigner/resource/arrow-left.png | Bin 0 -> 672 bytes src/lpbdesigner/resource/arrow-right.png | Bin 0 -> 693 bytes src/lpbdesigner/resource/arrow.png | Bin 0 -> 692 bytes src/lpbdesigner/resource/btn-close.png | Bin 0 -> 757 bytes src/lpbdesigner/resource/caret-down.png | Bin 0 -> 446 bytes src/lpbdesigner/resource/caret-left.png | Bin 0 -> 477 bytes src/lpbdesigner/resource/caret-right.png | Bin 0 -> 431 bytes src/lpbdesigner/resource/caret-up.png | Bin 0 -> 461 bytes src/lpbdesigner/resource/down.png | Bin 0 -> 1091 bytes src/lpbdesigner/resource/img.png | Bin 0 -> 1687 bytes src/lpbdesigner/resource/interlines.png | Bin 0 -> 10776 bytes src/lpbdesigner/resource/left_more.png | Bin 0 -> 1026 bytes src/lpbdesigner/resource/lock-open.png | Bin 0 -> 1020 bytes src/lpbdesigner/resource/lock-open_green.png | Bin 0 -> 1023 bytes src/lpbdesigner/resource/lock.png | Bin 0 -> 943 bytes src/lpbdesigner/resource/no-img.png | Bin 0 -> 5422 bytes src/lpbdesigner/resource/right_more.png | Bin 0 -> 966 bytes src/lpbdesigner/resource/save-all.png | Bin 0 -> 1437 bytes src/lpbdesigner/resource/save.png | Bin 18714 -> 1201 bytes src/lpbdesigner/resource/thumbtack.png | Bin 0 -> 822 bytes src/lpbdesigner/resource/up.png | Bin 0 -> 1017 bytes src/tpMain/Resource/no-img.png | Bin 0 -> 5422 bytes src/tpMain/hubDetect.qrc | 1 + src/tpMain/qaddmodel.cpp | 7 + src/tpMain/qaddmodel.h | 2 + src/tpMain/qshowimg.cpp | 8 + src/tpMain/qshowimg.h | 2 + src/tpMain/qworkItemdlg.cpp | 8 + src/tpMain/qworkItemdlg.h | 3 +- src/tpMain/qworkmgrui.cpp | 14 +- src/tpMain/qworkmgrui.h | 1 + tpvs17/tpMain/QAlgParamDlg.cpp | 8 + tpvs17/tpMain/QAlgParamDlg.h | 7 +- tpvs17/tpMain/QCamSettingDlg.cpp | 8 + tpvs17/tpMain/QCamSettingDlg.h | 2 + tpvs17/tpMain/QDebugDlg.cpp | 8 + tpvs17/tpMain/QDebugDlg.h | 2 + tpvs17/tpMain/QModelMgrDlg.cpp | 10 +- tpvs17/tpMain/QModelMgrDlg.h | 2 +- tpvs17/tpMain/QModelMgrDlg.ui | 18 +- tpvs17/tpMain/QSettingDlg.cpp | 12 - tpvs17/tpMain/QSettingDlg.h | 19 - tpvs17/tpMain/QSettingDlg.ui | 23 - tpvs17/tpMain/lpMainWin.cpp | 26 +- tpvs17/tpMain/lpMainWin.ui | 2 +- tpvs17/tpMain/tpMain.vcxproj | 30 - tpvs17/tpMain/tpMain.vcxproj.filters | 12 - 61 files changed, 628 insertions(+), 415 deletions(-) create mode 100644 src/lpbdesigner/resource/arrow-down.png create mode 100644 src/lpbdesigner/resource/arrow-left.png create mode 100644 src/lpbdesigner/resource/arrow-right.png create mode 100644 src/lpbdesigner/resource/arrow.png create mode 100644 src/lpbdesigner/resource/btn-close.png create mode 100644 src/lpbdesigner/resource/caret-down.png create mode 100644 src/lpbdesigner/resource/caret-left.png create mode 100644 src/lpbdesigner/resource/caret-right.png create mode 100644 src/lpbdesigner/resource/caret-up.png create mode 100644 src/lpbdesigner/resource/down.png create mode 100644 src/lpbdesigner/resource/img.png create mode 100644 src/lpbdesigner/resource/interlines.png create mode 100644 src/lpbdesigner/resource/left_more.png create mode 100644 src/lpbdesigner/resource/lock-open.png create mode 100644 src/lpbdesigner/resource/lock-open_green.png create mode 100644 src/lpbdesigner/resource/lock.png create mode 100644 src/lpbdesigner/resource/no-img.png create mode 100644 src/lpbdesigner/resource/right_more.png create mode 100644 src/lpbdesigner/resource/save-all.png create mode 100644 src/lpbdesigner/resource/thumbtack.png create mode 100644 src/lpbdesigner/resource/up.png create mode 100644 src/tpMain/Resource/no-img.png delete mode 100644 tpvs17/tpMain/QSettingDlg.cpp delete mode 100644 tpvs17/tpMain/QSettingDlg.h delete mode 100644 tpvs17/tpMain/QSettingDlg.ui diff --git a/src/lpbdesigner/DrawTool.cpp b/src/lpbdesigner/DrawTool.cpp index a1ad482..598c4a9 100644 --- a/src/lpbdesigner/DrawTool.cpp +++ b/src/lpbdesigner/DrawTool.cpp @@ -42,7 +42,7 @@ static void setCursor(QGraphicsScene * scene, const QCursor & cursor) for (int i = 0; i < views.count(); i++) { QGraphicsView * view = views.at(i); - if (view && (int)view->userData(0) == 1) + if (view /*&& (int)view->userData(0) == 1*/) view->setCursor(cursor); } } diff --git a/src/lpbdesigner/DsgAlgoDlg.cpp b/src/lpbdesigner/DsgAlgoDlg.cpp index 678193d..0346b12 100644 --- a/src/lpbdesigner/DsgAlgoDlg.cpp +++ b/src/lpbdesigner/DsgAlgoDlg.cpp @@ -2,7 +2,7 @@ #include "ui_AlgoDlg.h" #include "qfiledialog.h" #include "QDesktopWidget" - +#pragma execution_character_set("utf-8") CDsgAlgoDlg::CDsgAlgoDlg(QWidget *parent) : QDialog(parent), ui(new Ui::AlgoDlg) { m_pDE = NULL; diff --git a/src/lpbdesigner/DsgParamDlg.cpp b/src/lpbdesigner/DsgParamDlg.cpp index b081dc9..7485bb8 100644 --- a/src/lpbdesigner/DsgParamDlg.cpp +++ b/src/lpbdesigner/DsgParamDlg.cpp @@ -1,6 +1,6 @@ #include "DsgParamDlg.h" #include "ui_ParamDlg.h" - +#pragma execution_character_set("utf-8") CDsgParamDlg::CDsgParamDlg(QWidget *parent) : QDialog(parent), m_valueCombox(this) { ui = new Ui::ParamDlg; @@ -144,6 +144,15 @@ bool CDsgParamDlg::OnShowRoiDlg() if (!m_pRoiDlg->Initialize(m_pDE, m_pAlgo, m_pTask)) return false; + + if (m_pTask->GetTaskInfo()->templateImg.data == NULL) + { + QMessageBox infobox(QMessageBox::Critical, tr("提示"), tr("请设置标定图再进行ROI标定!"), QMessageBox::Yes, this); + infobox.setWindowIcon(QIcon(":/image/leaper")); + infobox.setButtonText(QMessageBox::Yes, tr("确认")); + infobox.exec(); + return false; + } m_tRoiData.img = m_pTask->GetTaskInfo()->templateImg; m_pRoiDlg->setParent(this); m_pRoiDlg->setWindowFlags(Qt::Dialog | Qt::WindowCloseButtonHint); diff --git a/src/lpbdesigner/DsgRoiDlg.cpp b/src/lpbdesigner/DsgRoiDlg.cpp index ea7daaf..94b499b 100644 --- a/src/lpbdesigner/DsgRoiDlg.cpp +++ b/src/lpbdesigner/DsgRoiDlg.cpp @@ -49,6 +49,32 @@ CDsgRoiDlg::CDsgRoiDlg(QWidget *parent) : QDialog(parent), ui(new Ui::RoiDlg) m_pRoiScene = new RoiScene(this); m_pRoiScene->SetGraphicsView(ui->graphicsView); m_pRoiScene->SetInfoLable(ui->label_pixel_info); + + connect(ui->m_pbUp, SIGNAL(clicked()), this, SLOT(OnMove())); + connect(ui->m_pbLeft, SIGNAL(clicked()), this, SLOT(OnMove())); + connect(ui->m_pbRight, SIGNAL(clicked()), this, SLOT(OnMove())); + connect(ui->m_pbDown, SIGNAL(clicked()), this, SLOT(OnMove())); + /*开启按钮长按功能*/ + ui->m_pbUp->setAutoRepeat(true); + ui->m_pbUp->setAutoRepeatDelay(400); + ui->m_pbUp->setAutoRepeatInterval(50); + + ui->m_pbLeft->setAutoRepeat(true); + ui->m_pbLeft->setAutoRepeatDelay(400); + ui->m_pbLeft->setAutoRepeatInterval(50); + + ui->m_pbRight->setAutoRepeat(true); + ui->m_pbRight->setAutoRepeatDelay(400); + ui->m_pbRight->setAutoRepeatInterval(50); + + ui->m_pbDown->setAutoRepeat(true); + ui->m_pbDown->setAutoRepeatDelay(400); + ui->m_pbDown->setAutoRepeatInterval(50); + + int slide = SystemStateInfo::setIni.value("sliderValue",1).toInt(); + ui->horizontalSlider->setValue(slide); + connect(ui->horizontalSlider, SIGNAL(valueChanged(int)), this, SLOT(onSliderChange(int))); + } CDsgRoiDlg::~CDsgRoiDlg() @@ -113,7 +139,7 @@ bool CDsgRoiDlg::OnOk() int nItems = m_pRoiScene->getGraphItems(); if (nCount != nItems) { - int a = QMessageBox::warning(this, QObject::tr("警告"), QObject::tr("系统检测到有ROI未进行绑定,请绑定后继续!!!")); + QMessageBox::warning(this, QObject::tr("警告"), QObject::tr("系统检测到有ROI未进行绑定,请绑定后继续!!!")); return false; } QDialog::accept(); @@ -146,10 +172,8 @@ void CDsgRoiDlg::OnShowColorDlg() QColor color = QColorDialog::getColor(Qt::black,this,QString("select color")); if (color.rgb() == QColor(0, 0, 0).rgb()) return ; - QString strRGB = QString("(%1,%2,%3)").arg(QString::number(color.red()), QString::number(color.green()), QString::number(color.blue())); - ui->lineEdit_3->setText(strRGB); - QString strStyle = QString("background-color:rgba(%1,%2,%3,255);").arg(color.red()).arg(color.green()).arg(color.blue()); - ui->lineEdit_3->setStyleSheet(strStyle); + QString strStyle = QString("font:8px ;background-color:rgba(%1,%2,%3,255);").arg(color.red()).arg(color.green()).arg(color.blue()); + ui->label_Color->setStyleSheet(strStyle); SystemStateInfo::rgb = color.rgb(); return; } @@ -193,10 +217,9 @@ LP_DETECTOR_ROI_DATA CDsgRoiDlg::ShowRoiDlg(LP_DETECTOR_ROI_DATA roiData) if (SystemStateInfo::rgb == 0) SystemStateInfo::rgb = QColor(255, 0, 0).rgb(); QColor color(SystemStateInfo::rgb); - QString strRGB = QString("(%1,%2,%3)").arg(QString::number(color.red()), QString::number(color.green()), QString::number(color.blue())); - ui->lineEdit_3->setText(strRGB); + QString strStyle = QString("background-color:rgba(%1,%2,%3,255);").arg(color.red()).arg(color.green()).arg(color.blue()); - ui->lineEdit_3->setStyleSheet(strStyle); + ui->label_Color->setStyleSheet(strStyle); QDesktopWidget* desktop = QApplication::desktop(); move((desktop->width() - this->width()) / 2, (desktop->height() - this->height()) / 2); @@ -415,23 +438,24 @@ void CDsgRoiDlg::OnMove() { if (!m_pRoiScene) return; - if (sender()->objectName() == "pushButton_10") + + int step = ui->horizontalSlider->value(); + if (sender()->objectName() == "m_pbLeft") { - m_pRoiScene->MoveSelectedItem(LEFT); + m_pRoiScene->MoveSelectedItem(LEFT, step); } - else if (sender()->objectName() == "pushButton_11") + else if (sender()->objectName() == "m_pbUp") { - m_pRoiScene->MoveSelectedItem(UP); + m_pRoiScene->MoveSelectedItem(UP, step); } - else if (sender()->objectName() == "pushButton_12") + else if (sender()->objectName() == "m_pbRight") { - m_pRoiScene->MoveSelectedItem(RIGHT); + m_pRoiScene->MoveSelectedItem(RIGHT, step); } - else if (sender()->objectName() == "pushButton_13") + else if (sender()->objectName() == "m_pbDown") { - m_pRoiScene->MoveSelectedItem(DOWN); + m_pRoiScene->MoveSelectedItem(DOWN, step); } - } void CDsgRoiDlg::showEvent(QShowEvent *evt) @@ -456,3 +480,15 @@ void CDsgRoiDlg::OnZoomOut() m_pRoiScene->zoomImage(false); } +Q_SLOT void CDsgRoiDlg::onSliderChange(int value) +{ + SystemStateInfo::setIni.setValue(QStringLiteral("sliderValue"), value); +} + +void CDsgRoiDlg::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui->retranslateUi(this); + } +} diff --git a/src/lpbdesigner/DsgRoiDlg.h b/src/lpbdesigner/DsgRoiDlg.h index e86b3ad..86ced8e 100644 --- a/src/lpbdesigner/DsgRoiDlg.h +++ b/src/lpbdesigner/DsgRoiDlg.h @@ -24,6 +24,9 @@ public: virtual void OnManualTrigger(){} virtual void OnSetParam(IDetectorTask* pTask){} virtual void showEvent(QShowEvent *evt); + Q_SLOT void onSliderChange(int value); +protected: + virtual void changeEvent(QEvent *event); public slots : bool OnOk(); bool OnCancel(); @@ -34,6 +37,7 @@ public slots : void OnMove(); void OnZoomIn(); void OnZoomOut(); + void OnSelectImage(); void OnShowTenFlag(); private: diff --git a/src/lpbdesigner/MainFrame.cpp b/src/lpbdesigner/MainFrame.cpp index 0542230..f92b21e 100644 --- a/src/lpbdesigner/MainFrame.cpp +++ b/src/lpbdesigner/MainFrame.cpp @@ -117,26 +117,25 @@ CMainFrame::CMainFrame(QWidget *parent) ui->setupUi(this); setContextMenuPolicy(Qt::NoContextMenu); setWindowIcon(QIcon(":/img/resource/app.png")); + //task列表控件设置 connect(ui->treeWidget, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(OnTreeItemClick())); ui->treeWidget->setStyleSheet("QTreeWidget::item{height:30px}"); - + + //算法列表控件初始化 ui->tableWidget_2->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->tableWidget_2, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(OnParamPopMenu(const QPoint&))); connect(ui->tableWidget_2, SIGNAL(cellDoubleClicked(int, int)), this, SLOT(OnRunAlgo())); connect(ui->tableWidget_2, SIGNAL(cellClicked(int, int)), this, SLOT(OnInitCurrentAlgoParam())); - + + //算法参数列表控件初始化 ui->tableWidget->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->tableWidget, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(OnParamListPopMenu(const QPoint&))); connect(ui->tableWidget, SIGNAL(cellClicked(int, int)), this, SLOT(OnCellClicked(int, int))); + + //图像输入框 + ui->gv_input->setInfoLabel(ui->label_pixel_info); ui->gv_input->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->gv_input, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(OnGvInputWidgetPopMenu(const QPoint&))); - - connect(ui->pushButton_5, SIGNAL(clicked()), this, SLOT(OnClearResult()));//清空打印信息 - connect(ui->m_pbLoadImage, SIGNAL(clicked()), this, SLOT(onLoadImage()));//加载图片 - connect(ui->m_pbSaveBtn, SIGNAL(clicked()), this, SLOT(OnTrigger()));//保存标定参数 - connect(this, SIGNAL(sgShowStatus(QString)), this, SLOT(OnShowStatus(QString))); - - ui->gv_input->setInfoLabel(ui->label_pixel_info); connect(ui->gv_input, SIGNAL(imgScaled(QTransform, QPointF)), ui->gv_output, SLOT(scaleImg(QTransform, QPointF))); connect(ui->gv_input, SIGNAL(imgMoved(QPointF)), ui->gv_output, SLOT(moveImg(QPointF))); connect(ui->gv_output, SIGNAL(imgScaled(QTransform, QPointF)), ui->gv_input, SLOT(scaleImg(QTransform, QPointF))); @@ -144,7 +143,12 @@ CMainFrame::CMainFrame(QWidget *parent) connect(ui->gv_output, SIGNAL(pixelSelected(QPoint)), ui->gv_input, SLOT(selectPixel(QPoint))); connect(this, SIGNAL(sgShowCameraImage(QImage)), this, SLOT(OnShowCameraImage(QImage))); - m_plablStatus = new QLabel(this); + connect(ui->pushButton_5, SIGNAL(clicked()), this, SLOT(OnClearResult()));//清空打印信息 + connect(ui->m_pbLoadImage, SIGNAL(clicked()), this, SLOT(onLoadImage()));//加载图片 + connect(ui->m_pbSaveBtn, SIGNAL(clicked()), this, SLOT(OnTrigger()));//保存标定参数 + connect(this, SIGNAL(sgShowStatus(QString)), this, SLOT(OnShowStatus(QString))); + + m_plablStatus = new QLabel(this);//菜单栏提示信息 ui->statusBar->addWidget(m_plablStatus); _pSaveStatus = ui->label_SaveStatus; } @@ -165,12 +169,10 @@ CMainFrame::~CMainFrame() bool CMainFrame::OnMainMenuTrigger(QAction* pAction) { - if (pAction) - { + if (pAction) { QString strName = pAction->objectName(); - if ("action_save" == strName) - { - if (_pOldTask){ + if ("action_save" == strName) { + if (_pOldTask) { if (!oldMat.empty()) _pOldTask->GetTaskInfo()->templateImg = oldMat; } @@ -374,7 +376,16 @@ bool CMainFrame::InitCurrentTask() std::string strPath = strImageName.toLocal8Bit().toStdString(); m_pCurrentTask->GetTaskInfo()->templateImg = cv::imread(strPath, CV_LOAD_IMAGE_GRAYSCALE); } - ColossusBase::showImage(m_pCurrentTask->GetTaskInfo()->templateImg, ui->gv_input); + if (m_pCurrentTask->GetTaskInfo()->templateImg.data == NULL) + { + QImage img(":/resource/no-img.png"); + ui->gv_input->setImg(img); + } + else + { + ColossusBase::showImage(m_pCurrentTask->GetTaskInfo()->templateImg, ui->gv_input); + } + } return true; diff --git a/src/lpbdesigner/MainFrame.ui b/src/lpbdesigner/MainFrame.ui index 1b16512..f5e67d2 100644 --- a/src/lpbdesigner/MainFrame.ui +++ b/src/lpbdesigner/MainFrame.ui @@ -9,8 +9,8 @@ 0 0 - 1050 - 755 + 1022 + 702 @@ -315,7 +315,7 @@ - 加载图像 + 加载标定图像 diff --git a/src/lpbdesigner/RoiDlg.ui b/src/lpbdesigner/RoiDlg.ui index 4e58253..50493b6 100644 --- a/src/lpbdesigner/RoiDlg.ui +++ b/src/lpbdesigner/RoiDlg.ui @@ -9,63 +9,79 @@ 0 0 - 896 - 587 + 925 + 623 ROI检测区域配置 - - 5 - - - 5 - - - 5 - - - 5 - - - - - Qt::Horizontal - - - - 649 - 27 - - - - - - - - - 0 - 30 - - + + 12 - - 确定 + + 绘图区域: + + + 2 + + + 6 + + + 6 + + + 6 + + + 6 + + + + + + 12 + + + + Pixel info: + + + + + + + + 12 + + + + background-color: rgb(212, 212, 212); + + + QGraphicsView::AnchorUnderMouse + + + QGraphicsView::AnchorUnderMouse + + + + - - - + + + - 0 - 30 + 140 + 16777215 @@ -73,211 +89,340 @@ 12 - - 取消 + + 工具 + + + + + + + + 0 + 0 + + + + + + + + + + + + 80 + 16777215 + + + + + 12 + + + + 颜色 + + + + + + + + + + 0 + 30 + + + + + 130 + 16777215 + + + + + 12 + + + + + + + + + + + + 0 + 30 + + + + + 12 + + + + 十字标定线 + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + 步长 + + + + + + + 1 + + + 10 + + + 1 + + + Qt::Horizontal + + + false + + + false + + + QSlider::TicksAbove + + + 1 + + + + + + + + + 5 + + + 0 + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + ... + + + + :/resource/caret-up.png:/resource/caret-up.png + + + + 32 + 32 + + + + true + + + + + + + ... + + + + :/resource/caret-down.png:/resource/caret-down.png + + + + 32 + 32 + + + + true + + + + + + + ... + + + + :/resource/caret-right.png:/resource/caret-right.png + + + + 32 + 32 + + + + true + + + + + + + ... + + + + :/resource/caret-left.png:/resource/caret-left.png + + + + 32 + 32 + + + + true + + + + + + + false + + + ... + + + + :/resource/btn-close.png:/resource/btn-close.png + + + + 32 + 32 + + + + false + + + false + + + false + + + QToolButton::DelayedPopup + + + true + + + Qt::NoArrow + + + + + + - - - - Qt::Horizontal - - - - - 140 - 16777215 - - - - - 12 - - - - 工具 - - - - 2 + + + + + + Qt::Horizontal - - 2 + + + 649 + 27 + - - 2 + + + + + + + 0 + 30 + - - 2 + + + 12 + - - - - - - - 80 - 16777215 - - - - - 12 - - - - 颜色 - - - - - - - - 0 - 0 - - - - - 50 - 0 - - - - - 100 - 16777215 - - - - - 12 - - - - - - - - - - - 0 - 30 - - - - - 130 - 16777215 - - - - - 12 - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - 0 - 30 - - - - - 12 - - - - 十字标定线 - - - - - - - - - 12 - - - - 绘图区域: - - - - 2 + + 确定 - - 6 + + + + + + + 0 + 30 + - - 6 + + + 12 + - - 6 + + 取消 - - 6 - - - - - - 12 - - - - Pixel info: - - - - - - - - 12 - - - - background-color: rgb(212, 212, 212); - - - QGraphicsView::AnchorUnderMouse - - - QGraphicsView::AnchorUnderMouse - - - - - - + + + - + + + diff --git a/src/lpbdesigner/RoiItem.cpp b/src/lpbdesigner/RoiItem.cpp index 3e8b485..72fe188 100644 --- a/src/lpbdesigner/RoiItem.cpp +++ b/src/lpbdesigner/RoiItem.cpp @@ -5,7 +5,7 @@ #include #include #include -#define MinRECTWITH 20 +#define MinRECTWITH 32 static QPainterPath qt_graphicsItem_shapeFromPath(const QPainterPath &path, const QPen &pen) { const qreal penWidthZero = qreal(0.00000001); @@ -65,9 +65,9 @@ void GraphicsItemGroup::paint(QPainter *painter, const QStyleOptionGraphicsItem //绘制中心 painter->setPen(QPen(QColor(qRed(rgb), qGreen(rgb), qBlue(rgb)), 3, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); - painter->drawEllipse(-5, -5, 10, 10); - painter->drawLine(QLineF(QPointF(-10, 0), QPointF(10, 0))); - painter->drawLine(QLineF(QPointF(0, -10), QPointF(0, 10))); + painter->drawEllipse(-20, -20, 25, 25); + painter->drawLine(QLineF(QPointF(-15, 0), QPointF(15, 0))); + painter->drawLine(QLineF(QPointF(0, -15), QPointF(0, 15))); } } @@ -110,12 +110,8 @@ QRectF GraphicsItemGroup::boundingRect() const { rect = mapRectFromItem(m_vecItem[i], m_vecItem[i]->rect()); } - rects = rects.united(rect); - } - - return rects; } diff --git a/src/lpbdesigner/RoiScene.cpp b/src/lpbdesigner/RoiScene.cpp index 1a611ed..ca44b5c 100644 --- a/src/lpbdesigner/RoiScene.cpp +++ b/src/lpbdesigner/RoiScene.cpp @@ -233,7 +233,6 @@ bool RoiScene::InitRecord(Item_List record, int nIndex) itemPoint.setX(item.second.at(0)); itemPoint.setY(item.second.at(1)); graphicItem->setPos(itemPoint-mImgPosOffSet); - //m_graphItemMap[graphicItem]= maptoImgNewPos(graphicItem); tagROIParas tagItem; tagItem._model = ENUM_LOCKROI; tagItem.rectf = maptoImgNewPos(graphicItem); @@ -279,7 +278,6 @@ void RoiScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) DrawTool * tool = DrawTool::findTool(DrawTool::c_drawShape); if (tool) tool->mousePressEvent(mouseEvent, this); - } } @@ -337,7 +335,7 @@ void RoiScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent) } -void RoiScene::MoveSelectedItem(DirType type) +void RoiScene::MoveSelectedItem(DirType type, int step) { QList items = this->selectedItems(); GraphicsItem *item = 0; @@ -351,22 +349,22 @@ void RoiScene::MoveSelectedItem(DirType type) { case LEFT: { - item->moveBy(-1, 0); + item->moveBy(-step, 0); break; } case RIGHT: { - item->moveBy(1, 0); + item->moveBy(step, 0); break; } case UP: { - item->moveBy(0, -1); + item->moveBy(0, -step); break; } case DOWN: { - item->moveBy(0, 1); + item->moveBy(0, step); break; } } @@ -480,6 +478,7 @@ void RoiScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) { unCheckAction = menu.addAction(QObject::tr("解绑")); unCheckAction->setObjectName("unCheckAction"); + unCheckAction->setIcon(QIcon(":/resource/lock-open.png")); } else if (tmpModel == ENUM_BINDROI) { @@ -487,28 +486,34 @@ void RoiScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) { checkAction = menu.addAction(QObject::tr("绑定")); checkAction->setObjectName("checkAction"); + checkAction->setIcon(QIcon(":/resource/lock.png")); } unCheckAction = menu.addAction(QObject::tr("解除径向绑定")); unCheckAction->setObjectName("unCheckAction"); + unCheckAction->setIcon(QIcon(":/resource/lock.png")); } else if (tmpModel == ENUM_UNBINDROI) { radiusFixAction = menu.addAction(QObject::tr("径向解锁")); radiusFixAction->setObjectName("radiusUnfixAction"); + unCheckAction->setIcon(QIcon(":/resource/lock-open_green.png")); } else { if (items.size() > 0){ deleteAction = menu.addAction(QObject::tr("删除")); deleteAction->setObjectName("deleteAction"); + deleteAction->setIcon(QIcon(":/resource/btn-close.png")); } checkAction = menu.addAction(QObject::tr("绑定")); checkAction->setObjectName("checkAction"); + checkAction->setIcon(QIcon(":/resource/lock.png")); if (m_graphItemMapStruct.size() == 2){ if (tmpModel != ENUM_UNLOCKROI){ unCheckAction = menu.addAction(QObject::tr("解绑")); unCheckAction->setObjectName("unCheckAction"); + unCheckAction->setIcon(QIcon(":/resource/lock-open.png")); } GraphicsItem *pFirst = m_graphItemMapStruct.firstKey(); @@ -525,6 +530,7 @@ void RoiScene::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) if (pSmallItem == ptmpItem){ radiusFixAction = menu.addAction(QObject::tr("径向绑定")); radiusFixAction->setObjectName("radiusFixAction"); + radiusFixAction->setIcon(QIcon(":/resource/lock.png")); } } } @@ -767,7 +773,13 @@ void RoiScene::InitShowImage(cv::Mat img) if (!mpGraphicsView) return; if (img.empty()) + { + if (m_pImageItem) + { + m_pImageItem = nullptr; + } return; + } mpShowImage = ColossusBase::convMat2QImage(img); diff --git a/src/lpbdesigner/RoiScene.h b/src/lpbdesigner/RoiScene.h index ffbe4f0..df934da 100644 --- a/src/lpbdesigner/RoiScene.h +++ b/src/lpbdesigner/RoiScene.h @@ -53,7 +53,7 @@ public: bool InitRecord(Item_List record, int nIndex); void InitShowImage(cv::Mat img); void DisableMenu(bool bRet) { m_bDisableMenu = bRet; } - void MoveSelectedItem(DirType type); + void MoveSelectedItem(DirType type,int step = 1); void SetSelectedItem(QPoint pos, QRect size); void SetGraphicsView(QGraphicsView* ipGV){ mpGraphicsView = ipGV; } void SetInfoLable(QLabel* ipLable){ mpInfoLabel = ipLable; } diff --git a/src/lpbdesigner/SizeHandle.h b/src/lpbdesigner/SizeHandle.h index f651f9c..4368b6b 100644 --- a/src/lpbdesigner/SizeHandle.h +++ b/src/lpbdesigner/SizeHandle.h @@ -12,7 +12,7 @@ class QGraphicsSceneMouseEvent; QT_END_NAMESPACE -enum { SELECTION_HANDLE_SIZE = 10, SELECTION_MARGIN = 10 }; +enum { SELECTION_HANDLE_SIZE = 20, SELECTION_MARGIN = 20 }; enum SelectionHandleState { SelectionHandleOff, SelectionHandleInactive, SelectionHandleActive }; class SizeHandleRect :public QGraphicsRectItem diff --git a/src/lpbdesigner/image.qrc b/src/lpbdesigner/image.qrc index d31d58d..dc8c026 100644 --- a/src/lpbdesigner/image.qrc +++ b/src/lpbdesigner/image.qrc @@ -1,6 +1,21 @@ resource/app.png + resource/arrow.png + resource/arrow-down.png + resource/arrow-left.png + resource/arrow-right.png + resource/btn-close.png + resource/lock.png + resource/lock-open.png + resource/no-img.png + resource/caret-down.png + resource/caret-left.png + resource/caret-right.png + resource/caret-up.png + resource/interlines.png + resource/lock-open_green.png resource/save.png + resource/save-all.png diff --git a/src/lpbdesigner/resource/arrow-down.png b/src/lpbdesigner/resource/arrow-down.png new file mode 100644 index 0000000000000000000000000000000000000000..29d1d4439a139c662aecca94b6f43a465cfb9cc6 GIT binary patch literal 594 zcmV-Y0j z)Xz`TU>wKswOeUBH_Vo3LZ*V4p&U4v;LVFDq!ObUNJtQHC_UYOy}c$4_Z z287Mpy&>Gkk3$;%;XTGD)-SARcb^V+y#l_lys$a@k{nD+qgKLE+C6xLudGK{sd70w zcE71nDjtqr6rQslcH!s21HbzIZLG4Ku(F%O+U^xp_O4>4nBl-LJ{^?W2788E7ww3c$dW3qz>Ki(HSZqJlD~5#;x#SD}gQ7 zgv0(;bxhbL9Yezjn5K`uZiTiRwq2=|ckJ6DkxX7Tsy45p8>IMse%D zf;Vqf6vh<#P(J!fv{R}3IKcTOvuzkL=(>--JPth;j^KP+u2DCF7oBg1O2Gjh4!6=F*q9T|y1_O#Bk`EOz zt`aOF*rkvsjU=eYE1q=`Y1y%J`MXFjg00*Rj5nvsV0+Ka# zbwVHY97cf&pbf|XO(n4kXb9g+Rd6Zv&>(tc+$x~JE}#S0ToP?SYuLms3ND5AA46|X zSRK7y1TPj(0=z+0|7~7qR0_D+n`P+WaZA!c?lb(Fi@Rq9tVB4mSQGJc4la)X&<=c5 z)x0Z%+VDF!_75=Bm$e|E9$GTs3^)m30|^sh1!mqA5iU3fS7wrCV0_;Zd$Q+faE%9V z!F%w4H?dN~yBMhC*mCe#|KQ3~yZh%6d@R%$qUH}wO(?97p}rbeL{d%7i8I*~JILkV z5cw}i1>i#F#)PNV&R9`lW?I;|Wh>wEQ+S_)GPp<#*H9K8dax*1Rey-cfrqzVK0ke7 zCmS|(@_lxisPGB(z6eJG(8pzp%wMG_5bs~nZUc#gojiN7i;k`&vvX6Z&*3Dv0x$wD zIKlw$XJF(K0BeA+s`|@Sm>o|=r1SBE*RL{}Zq~PNC!c@IeBlF0x0-ZnTkx{S1c%^X zEXZd=)>V&mwmIFP=ZCxX{={CrcCY5iyIa?+2=I=^ri6};?a`}uir_S`VoB32z50^?EgKtx_rQQotL5 zIzU|yBXx8hR#kPGfYxH?G5}^~!LuIV;%Z@wBG|dxxNxbBzTS_Y%&c9~V4=Mx2{X$8 zn}BTpQ>d#yiU+)hL=F%9%zozg!W3nhEmT(S;oGF+e%Cvuf6VQdG_e}E9M}we@9csd zP2hn<5c>!(h=JHcEHGC~RYeOEVtAaWo}AvF>E@1C6X$1}ex^*Yg>2qsCmxC?9 z%Yn*ZBrgrY*ub$fr9n&WZX19aV0(D^HKCHyUQukAS-vVmp_538*ZM%Ll+QG@RZHKx bwBPq1k2>p2raNh0iv$(l~TMx4kdC6q9nEA|`**D{}k#dX8|6LB>7#;)I^Ped=4Hzs5}YJfl=IMqVOwV3TOn<`fg+FtutHTOl+p4ItW@S@UCRT$s#e2Vdg=lo5D}~>p3$197_jRp z=YhPc7Gm8z$3=Kf7AcnG)$Gyx5pjP)J5;=W_SftyqWmZ>V+N`!8lA3I}LdVVyM axbX+reAIe(fQ}9T00006gB0F2&*5QUV2by2aSX{| zeLK_EkJ(V5HJ#J*u;>C#UJng-hlR`76bsq>4ognh!I1foOCc)b0hbA9=gH{f()o|R zzPI4rCX)2_*5`ZX|02^BwU(wV0K)`zNr6STI{92~Z1r1z{^gTbQ_tn~ZE|*Cj=Jzg zqxzhg(S?+oc`l!i7Kd@nXlL8fp=Kvg#=x^w;QQ(Gj=Wk&4F8^s-{f$>CdrwZbym=A ztJ1d&p{f}MJC>~awW9fyz4Nz;5$Sa|UN{72bw8W6FllM_t^PdzOta{8c5{Ubw|6i2 zetiA1SRdD!;WNWG{{CyY*S2Q2(=SE^FTM_!&!(%pHR*}=uQ<C(@$4&4`mzZd}7b8C;SI8<5n6U`NEta z5HxT5KH=ouj6$s2cxLOVWZaNXsn}{U*KTVcli=qoPj;5BeVwSjb*<+%<_A}kLhtI@ z+iy+a``ncx%mj>=Us-{r+v`_fe=YIq4yzR7`s;t+Zuo!spweD%-R|C^)!>xyKtAOG Yzx1OkdXobVOM{Y}r>mdKI;Vst01f~(&Hw-a literal 0 HcmV?d00001 diff --git a/src/lpbdesigner/resource/caret-down.png b/src/lpbdesigner/resource/caret-down.png new file mode 100644 index 0000000000000000000000000000000000000000..9181a38b18af0bed23eb4d6e87680e6e0064f004 GIT binary patch literal 446 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC#^NA%Cx&(BWL^T<6`n4RAsMW1 zr*HIPF%)PszWI6G#w$)c+*quwrCGaKKT6gxc~8|9Ij^R{b*S^v9?<|GH64n{)-wj&4PB^k0lzIcuG)l1J)zat1QdU*7e4*Wow_mBB$Sw{fhsWbsmSQLO8F;9_AOh z!PDZe@O?6WAa(ZW*$wMnTf1y^;eE7b=ZB*{8%wLU{J&tbUGMoQF3VZaEdS zr?X}>oe-QSdw_kS_MY4B``qrfUP$IES7!*gweNoWjM}sN#JJ3F+njMKPu-t??6IZG m@9iFa$YIhT@nbq$9fM%w{>a_uud4tfgu&C*&t;ucLK6VSv%6;i literal 0 HcmV?d00001 diff --git a/src/lpbdesigner/resource/caret-left.png b/src/lpbdesigner/resource/caret-left.png new file mode 100644 index 0000000000000000000000000000000000000000..5ee7421e274089d5af944cff66892b060d21b1f3 GIT binary patch literal 477 zcmV<30V4j1P)Px$mq|oHRA>e5*}X~wK@bP@4yaqK9|mO>q#-5t7-R*)4XP``XR@e{&02Sb)@01yTi41wvK;L%ckj+;2iz?e=^0 zHp)&vTrzZA21~{cuk!;a%NarSQvA^S`8eN~{7y5*6p&rr4l2SY0@~mJ1kkUiz;P2s zax?>QH7AY^!FKAi|8FOPd*h z1M&i}gLH_1pL|{K4HWer!5yDVTaYcL(apnF@%6pqV~a@&PvcSrQUy{4{8Zo<1gOtU T`GPxc00000NkvXXu0mjfNkz=A literal 0 HcmV?d00001 diff --git a/src/lpbdesigner/resource/caret-right.png b/src/lpbdesigner/resource/caret-right.png new file mode 100644 index 0000000000000000000000000000000000000000..6a60867c9f7f0cd1cedb0da93e1b6a11e4dbc60c GIT binary patch literal 431 zcmV;g0Z{&lP)Px$X-PyuRA>e5*)d83Q4j{;nKcRlPhn-{CA@+*-oVyi5tBkNNoC?K1n~@lXRy}; zSc`%t88hI6ZJnL@N8wGAO)>NSZ?<_MM78P$>IUitGB?21!-uo$eO@*PJN^FS<@xEW zbxzm5#xh`db#p{3eiB;WeSW+@k0$eD%N&m$6M$rOMk3o9KuC6FEw@<+6M&ib+S?PN zUKYXxXooM)SqL|PLNXApfDD8?0F4L%AQ52z6e1LWK!gLL5fDHm0tSdeKmid5IKUf` z0%#*Hrt?GnZml$c2L8D_jjiFeFBQ-wc9^7{cuf6a$;29nc@D2|JM1+R{qQXM}k>SGu(cwb@i11+mRQM18GQ2wg9o`j? z5#9_Ckr!<)l@(skx7~$!YeCFkI)I7a^j7I{G1Ga!th5J!XI9#fY@2KI+*6}T8Jc=CBBN-t>n;3lw>!HXwe!ihT| ze{P7T-@41^{_gfQJ9G8t)-s*-YfAIkbQ4 z;X>1^LdjC56$%&UWK9!Om|C#1D#lG#u-Y;8i=U}>z~2+ECSTpS*YEvTL&Yec>|4KY zTK5SzT0P;PYhJc}p5-r3e&oPm1akgK{9s^kydwJ`^5$J&{4jXB`njxgN@xNAT8F!f literal 0 HcmV?d00001 diff --git a/src/lpbdesigner/resource/down.png b/src/lpbdesigner/resource/down.png new file mode 100644 index 0000000000000000000000000000000000000000..2f5dcbccc023c2b1b6130fd4b86cd41fbb96dbdb GIT binary patch literal 1091 zcmV-J1ibr+P)Px&{YgYYRA>e5S4~KiK^T7L^N%pI6vK;2UOW_~L5GS$vJQ!Lsx_oTVBn>!Rzq4{ z+0@-F)LjKTNCpwvK?uSwNor9Ys#E_Ufmj|2q#y8))!mt9%!%F4-I@7*B!ZpGd^7XD z&-*;@{C)t*lFUFd1IY~h%M2hR!Tb99(!Na3RbUN%_+8FtMttMhdIEu*rFl}0wX_d@ zSKY^WHnKit0W4T(7C)qbyBR3bP=9)pv(|$UmIaA7?(+6*Cy}K`bSxhbicliweeU|} z@oYtXN&=S2&yf)zq%<0ginv8Z)EE`P$O8_K5km4}@DN<^xf^<-`()pm%zy?#i?igu zo;>p-n4Dhp25x!?k>c<;iO4VG5$L|$7Cg>vRcdMAD_6U>5+M5%ff*4YBG2&=!Ke7Q zN-Y(zA%lDc1m8tqDk40F>|y^3zM1-)~0TO>l2JY_$YyI%7} zXMhJ)o(VwrDEa~YQOR-s))vS! z48sDLld1@2D=ZetGi*}=n4@J8HjuX@z>)}?$Xga*N`#H%Z4qEdgw5nxZ0SYDjAW(V zeQ_iOv}3}{j*`#I)GCdh^Rn2cH*q}Rgd2N>JiFE7`B~{RB*5bj7KN7ZIndD0jcM7z z#>Sc%eehKx1mxYm;GS?8SJSibeMYnMhS6s^i>)lc-P%(HQ)fi0|X#-nFxZxlHx7Z4u^w=Q7=jYT;AX= zf+O^Y1~$b&3q-`&=^A?Sd>EM!A>G8D!NGLEnEue{$g`+~?3{^&Mt#2CTuwq(CnEm` z4jiw?ry67!(c@A9;qh+;^gUA$?G*EEKtxk}R~13zE?+h=IJ`l~KK`jvO9kvG&Yz@H z`&J01AcB#{1P17=$zH%i!dSXNsQ|XA=w_^>`+Y*^8`~6!P$!Q%eJu_BvB2V%Q~-1L zHrG#S8kCt4LD&3AwalYVe@p!(G2PXpN~aKaqnRwg7@pAGTg3a~)+?veYZNM<0Jf&V`PzX7FSADnXVm)ZaT002ov JPDHLkV1f-w3dsNf literal 0 HcmV?d00001 diff --git a/src/lpbdesigner/resource/img.png b/src/lpbdesigner/resource/img.png new file mode 100644 index 0000000000000000000000000000000000000000..ec4316a91824194468c60e8ddb8cf7fc2edf97a2 GIT binary patch literal 1687 zcmb7_{Xf$Q0LQ;u(>yn{EuB2h5N?ygT^(Xf7_B;Uo@P7AMdsne$r#cDW4NL`^OQVAQyxkh^YEII%{XC^oV&l^?uXCk^ZI=LfcNL>aUZ;f>Rwd<05pzy;7)93 z=s!~4x$V<85*@Y!6n_Hm0&s+Sa{#cDcno*+R1!#5mKLGsw!8b?b6K!9yUGbyHE8Zh zw5o<+63=*_d(a&8Q>j6--t_}c<1%8%*jT~JFg&^i8!kcL@hB__fPJlU zrQRG~Fo}8CS@_C8g|HBvGPGyZi_>`cuzfMV?`>LL>&g)3bZJM zYCM^uu4$AcOX~dn+T0%Vi=p0S{^zn-xXS!j76XH^MJ=RoJd0{~*~V!6IDBR+&Gj%d zp`!CH>jR22LfvT9YsHicZ@DT!<*5Cyk>OT3_CH5QuD3_-Ya-$2ihIK}t;vc)hH}46 z{>FrzHRxfV_(SdJho!;OznKD5!K38k$(*Z*9RyHOq?m^EVx?CDtGEcU8c4fMt-*Lb zVqk}87Ob8MHxyQG9$a{>)~^4A__U4&n8E;bN|}L3Cvq<@XT&Mx%PR9m@(!~@thX#o zBfZiZc28=+SrUsL!dfnhbT2GYNs&oTGf@~|s6n&?J?g?Z;Y55S znQ-160`pE`tE(JQm?KZ5YPv((DAjCEcV1?u@0;!g^8JnNWr^OrKi|8kmb5~wgEnPr z%-BrESVB|77H(&sfS7cJ&w{}EUyfW4cxVb1z4xZt* zv=0xckMbRi4tBJi&U5Dg0_d>!mPU8*Y}+~%pP4iwO^kdH23^dl7^xqfBq#blHIb`L zc};&GORxwj$jwzYjDPC4CcQtkbmL@;iHS~wgWCL|VQmc7>&T!!?XwM8zc*=!!OAJW z5!L?K(@{*_XNzW}M3-pYO!vLyPHx*2NIve$wfCvU;dEwM~7krHg}h;{K=Z?c?vsC zo4mY;Y%Pr8MOQ_T9z)Cb`h1rUk5Y~gxL4wPK!2&9i?TO7r6PtuyHv-68<3veFLb^T z)mt&nrH)U`_9X8f+vJ%cKBZ2wUlx62?mjA-pEx;ifcE+~WZaxU>kD*+O}{!Den_#b zn;50yJM8}=W4t)X4%6#*2yFPdQHT3NC+-K=%c6yd_bg`_ArKqlX_gl#J^*tTmQ0^a;&7*m1lY^`A%GP{E*?Ix*xyG+eg8`o40cQl>56YFahC2oHZw7y57u0cJ!YaH!i(BLYI0Rl$%i-ZO)5dhp?%H{85j~b( zyI``ha~wqVhn&@&laJU=n z`K-@)!RNLLWuChqqj;B-;lca6MDO8Ps91#MQq7Sb!!-btg)}eqF#=VBVU#mq6vNh} z5`kh61;X}Yz!`UUYo?~FBu!YM=lT7|`FH+M3I5vt?3-}sD|Xkzp1nknxi%$;grn|D z-$KnmWxBczh9Ks2f+oiT=yyO8Wr$?;gG!;Tq{AV|l_BajXHxCnF>@g7FCZ^F*hF^$0ao5 EZ`aEWxBvhE literal 0 HcmV?d00001 diff --git a/src/lpbdesigner/resource/interlines.png b/src/lpbdesigner/resource/interlines.png new file mode 100644 index 0000000000000000000000000000000000000000..39edf5ff765e89ae38ac3b70fb2ecd61a1e963ed GIT binary patch literal 10776 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 Xq}v()t8c)GPsr$`nL+sp*Bk!_AN^Om literal 0 HcmV?d00001 diff --git a/src/lpbdesigner/resource/left_more.png b/src/lpbdesigner/resource/left_more.png new file mode 100644 index 0000000000000000000000000000000000000000..255d50efeac5bebea9733e9e6f8a1eabdfd7d8df GIT binary patch literal 1026 zcmV+d1pWJoP)Px&yh%hsRA>e5SWQS&Q53%C&iH1uML`HHLWKx|a_d@+f(-iE%%Y5-g%kalPD7+K zBM-+J4N}Q0nrKthB8zfY5k$Mdg&WC|Hlr;nYtcdl$CH=f^Bl~l}9x=l90)e}UXs8DO zn9j{qO{G#*3yVv4@`RlN2Gfe-ZC9^fSuhRwJFy`IdK0$}kbL$XW2{yz2oxS9BB2gD zBslo=;?i@%*f9}L2&5_XH7BB%=8HDtXx#*4;Kecs{&q5UwNvOaDF-h+Ax*qhO@qCi zKZQjvsovm3F9n|G!5z6AjgRdy%c)LGD8|Zby;%dzW=a;IYywu`3o!5wc)hut7LpkA z%CF9SefICM5wk^^r*y5T8Ao2D$=YHIJf@)xZm2!oX?@1h$EN6w=X+M!24h8wapahQ zUGM;8G!YB+=$Et&9^ez9o>sNH>$g6KR(EuXoq$iq!XfQKeC!Z>OES{+L!U#h+a^$n z;5ivvM`+8y6Zow7{H^M>itF?vLnUGdU0ctqx9bHauM+A{+q56dM{@)Gk!BKe67J8yDd>>z@ z^H#4D$&txueB`i*6O#Xbpm;sa8}&LlCcuH%A%SnNKhN0Hp`p}v0bWQ)B;v#8M4U{P zMSv%=M}qBG&Meo-7Pd`-K%*>P*vclr6IhYJw|%N{-|ktlm|j|v09d0Gp6KJW`nm}4 zM5ZJFW|V4nG!O`sY)4EV5(fgFr)l{k`ySUPn wr(_P>l5eGa-8r`cZUx*5xD{|K@LyEm4?FxHkjkW+egFUf07*qoM6N<$f>(auNdN!< literal 0 HcmV?d00001 diff --git a/src/lpbdesigner/resource/lock-open.png b/src/lpbdesigner/resource/lock-open.png new file mode 100644 index 0000000000000000000000000000000000000000..c0a18bbf1dcc5e5fff6ee6518fc63dc2f60e407b GIT binary patch literal 1020 zcmVPx&wn;=mRA>e5SxZP%Q5gRJb7#g!T9#4v5Q$7Ci8j$DXi;VnBu1iEi+og@pn_^+ zv~W|na9IRBtf2A{BqS6BZfeuQRi*Yq7l~0}f|8HXxqts;=Xjj1ddKUXDYzGg^Pm6x zukZZlHRk|$Ut)Uz6XpK&(~nDshQcKP<_;jpA%LYEOg|y@8bUm2C=I?qL}t(Z#T`Ip zYj1`*K6;r$t0ti2*}_AF&j3cvy~Du=v&lsGaRpG(*jd0H?-N1RTtVq=oQ3w(v?Zn2 z59AE$d`ZU*Kvh#`u?g5rL`l-Q?Go{AvLE)|D9Qg4ts|ltZqzHA-fuSv9xW*NNI*ne z#wVbywuJ)G@wpD*RLi$C6DA+>Z1hJvkEPDwxAlg*>!NjB2QU);et}n++-S!Ote-vE z)Saj6x(Z;b_u-80P^WnUeiZ_aCkJq?$VyEShS-XL*K`@3=2c6Cz^u`Eu1?}(OdzE92 z;NXXo{BX!B_=wou^381ocu`ZCCJ6!qgM+&y!&Lz6q(C~-OWp@ATP=yY%mER+&OqPj zJV~2GyCv-!fXGpS16?5<>17gPt6sOF%gQj!{AX5eyslW(|CPZc1H2^SaWLP=pGf-bGqG{Fk7Y|K74_SN!%Ouw|0H&}$XA#eA>3lIt z*8nU=aCU5X0POUVn==1>27G$&@Yao0EnQV);vVL&)Z1dF!;{ObW-HI(^%ad>&y_u- zF+LD<_(a;(+hy556yGMH07Qc4Gst7!d=BzPVN*SJF}9z|_6wEfZ&zl~M0mKms`1m# zJ4bTW(rNg7eUqUHB`OJC$@(O%hEQem`=bnkgHO~)IVObab?*%&c|AgiE5MtdPx&xk*GpRA>e5Sx-n5Q5gTenOWCDO)Tg?UUD;(6e5GbL-}XDNRcE_r>t{9Zidxi zFUlewiw<>6L4<-lw2CIw#e*mRU`80I7#%9HRo7j2Uf*oY?AvMFopl_yVD|Ff_y7BS z-^_b&-U2wk>{bA?72ZE~t{}9$+{A#L2VlhrSO5%`0O1P?!kezTnfHju(&e}70Q{qs zg`x0T2Ow)<405+j5MeP5}8USDLZZ(}=vP&n$N)#Zdf@OEhG;@$S) zQV(xyD}Z?Q0q*btljaED1VOmvM(Id??$JGxB%TJur%5^-L2IfI*_7Kkmc6Uc{h;Tz z%-C~2AU7WqMWLyyes+oD#izc((ngTw9;$f0UPk*x1ccn8ZtujZBD1vv^zzl~6HsVM z;ulr@ic#{4yxaS6fRr98bN!D%}ISNXO9SY25;s0PuE>+YIspLIM# zl8zD+h5|&*w`~AqAy#M{x5CWJu-F zD;;KtbE?2SB#F;&j02fW- zP6sTP(4vDx2M|o%mRXFK);xDp%qWip0D!r)-fdQ(YsYX!{i(nHFGv+O0e~^>rXZDp zy)qn$-%4i?L<3OOQ2B!X8UK)h?T)Ha?C&l~xRc%|}}qLLJ@L?9bHM tcJwJ$m|~5)g`5C?rLrAgj!iZy@EcLf1#vk56U_hs002ovPDHLkV1lKb=*j>9 literal 0 HcmV?d00001 diff --git a/src/lpbdesigner/resource/lock.png b/src/lpbdesigner/resource/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..cafeeae411805022011ae4c1a44b1281c99a3ca4 GIT binary patch literal 943 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 literal 0 HcmV?d00001 diff --git a/src/lpbdesigner/resource/right_more.png b/src/lpbdesigner/resource/right_more.png new file mode 100644 index 0000000000000000000000000000000000000000..bfe5ed90ca7c43db0ac9e0646b046db70f92a517 GIT binary patch literal 966 zcmV;%13CPOP)Px&fJsC_RA>e5S6xUHQ53#s_D=~TEfNAFBPe=^>_td}h@c;(mmm=OA%d1tGG|{} zcUOkopB_?6ArN{niXPU7h=LHr^tFee6oLpMdo(aiUEOu&c5ga6KRYvfXI){Sxi53h zx##Em4%~C^AmlE$18xW04!9lopF7}TA&)TzsMxXpLd%(zv9Yl=mKeQ{kWTxXkDS=o zaqIfR=;$cc@0Y4Wu|T1}zb3ncUlS6|fZ!MMpi9X}=zXy`^?vMrUxNsU=BPse(*d8i zRk+tVtM(~Xwj_{BJ*ob)mKi67kL3#hWITv#jmNqs@-_?MA9#euF~T*n8vy$5_xVni zg9Ilh)qjVFhkXmV<#!tJ)CuEC5lL^Oy#uH8F?v1PJ5(>~z^|u3_1Ro*Qh4xquRg}E zZc1QwZs|Np)@YcJk%Wk|9qP`jb75Q_5~c(s4*gaaERb19a4=sGr!tg-geiekH$Md& zjHv1ribY5SssoPz;A3H+V%aPSQv$SvKf>Q20A48N3?vH@LVNpSmACTrR+6xsLKLom zF_(?^KO=|vvH^U>WHFr#rOijZ-hygN+b;3+$|Dpc73UFUyu=RCdyT1pvt(<*$*)-7Ec`Mkgb74dI&_+lCSj z-=3!x{OLEkk?JIUL z%~2A8aB}c4h`9-JH`FRc3?x94wcC9|20JJcf7m8rcupRNmj5IKU_24!KN#hpHm})+ zncWWf!0xJ+JHg{R9jFAu;JuD6B4DVVxy8y8B3~!P>p%KbB4cK`qY literal 0 HcmV?d00001 diff --git a/src/lpbdesigner/resource/save-all.png b/src/lpbdesigner/resource/save-all.png new file mode 100644 index 0000000000000000000000000000000000000000..e3f43c4f1d707da167764bf137092b7ebf02fea3 GIT binary patch literal 1437 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9GG!XV7ZFl&wkP>`#{ zHKN3^s3fzvgds5}N9)t8IdIX^l8pQ!kf`v6-3x)Dd?2;X`8heM$t9Wjc_10}O5L+S z8E%M7Zf$$do5Q34V}-OKNd)QDybd3f(sR#??SQn-#FHr#?yU6iRbXIJ;A~*{ITL3YI__Z4evjX57kUtpWVv@6+=>0j{i24}_T zJ0(`InlbTn-(+7?c;QF$ELIcdZZ63KYR8|3?`#lI6%G-tsAHSMS|`2bXKLNt$p=gl zYzQ1hTN#^b47 zDW{^B+6%c0@);6NZ5L#=S$fT|lTR=ZDqC3T&~2|PyDBfi^24nXl{H%zJXB6({-E_? zpVW=`48I$uE$a^aUK$ZGTc}~8q6ynQ-whYz%;pwsygzvw|?P@rEfZMr} zk7b_mHmQ?sK@P$j^q$PC7P!G3vq3=OnXk+Q20yEenue1HEEBT#-LR5o$ZF8-W8T$P z)0n{QU>fjhN1WS?+DYvP8NOFL9Hcr&_PQr(D+#l^@!Nfn%`Y({k``R8^1G( zH``oLv2=u^kI2=f9a;9DYV1=u6RKjWYV8;#tS+xqIkqXW>5@yv{j(gu z1kxGi9$3s_Uf2In!>Wj3AM@`&69r6p>$dk7erGKIyWkbay?zbVzSlp6E1Jsx2V_sF za*>!`>XY;%)I^Wri&SAjoBnH$7yDOg2?#TIGO#!ZF)&VGabQqk6hP&6Z2ia35V!1# UipXPMU{+`FboFyt=akR{0K!Z$MgRZ+ literal 0 HcmV?d00001 diff --git a/src/lpbdesigner/resource/save.png b/src/lpbdesigner/resource/save.png index ce706e4ade13359e567855433cf839963f1e60fb..e67d6d4a3ddd2c46ee8041a892dfb96bce35ad74 100644 GIT binary patch literal 1201 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 F0RWL{1gii5 diff --git a/src/lpbdesigner/resource/thumbtack.png b/src/lpbdesigner/resource/thumbtack.png new file mode 100644 index 0000000000000000000000000000000000000000..24e09d8cc1e51e9261db95590a352872bfc54277 GIT binary patch literal 822 zcmV-61Ihe}P)Px%@JU2LRA>e5SWRdXK@@&7X_7)C=%Ffz;187wB7z=7@Z!OPh{rv7$w@^GHmyR| zq%O@Ll_Uo5qJpPfJb0;IyeRZ$uY!80CPuN)Ln-EG_xU!MkS3Gu#%$IoGqCK;H*en0 z$Gq7$3m}_hKr$d1kPJu$Bm;ks0p_IXNGdZ8I!rU}S@o&6Ry4*8C-sYTITk={A#+j( zSVn*`(-33qDO`RsVE!aW*LBX z``Y)^{Oozo;Vc98dKBZZ+(J!QJRe5<|Tfqz}?ubB$YXTLCnk(IPXS zn*Gi<<;pi>=+~D{t8Nx^-L@S;EOWpS3qw}Y*A{Zr7rJIrA+&~ORZ2x1F=-ZZMf&b& z{n&9g0LI>dhu^d+r6UWO5e|TyPpdO;`(b!HS=VxaarVTH^Yp#h6gkZSd*C8zr!mG} z`Ht+rVoNQ91pO-MxTUcVUa#k=XuXp;P!|~>MxXn32QJ&aI;LW?=|Z7!zg#Z2d<%s_ zjSHMee@jR-*$>8$zhq!+&|igsxsEYd;lLw_Sa_))J*KRpC}zoPtL$~`$Chb0l6pAF zjru{a&%dhOxn4Fg*(3v!0m*=5Kr$d1_@5d01!CFhO#xv<<^TWy07*qoM6N<$g8ZI$ Ad;kCd literal 0 HcmV?d00001 diff --git a/src/lpbdesigner/resource/up.png b/src/lpbdesigner/resource/up.png new file mode 100644 index 0000000000000000000000000000000000000000..01d2633d6035f433b59b5f92e686b4cf12336766 GIT binary patch literal 1017 zcmVPx&vq?ljRA>e5mt9B{Q547TnO%1=(=hscFp?l&?CUwS+N1~xgJ8jj!j}*-R$F~& z*RclI)gJN-G4LS>grbF@2YZn+!Fnh{sVwOOLW~G27s|?Y-MQVdy}Iqk+&i-~)Wa++ z=kA?z{`3Exy)$fB)KOc;OgAFdY=VPs}(6)fDK!s3=|T z-4^+}Fd@r0B+K$+f1tC?DD8AQwsezv=M?jc(da0t-;tnEUhX>T9D6W)KVi{ZEi=U6OeQfN^R$)+g6KV>`8<&c zAi3R(HjJtO!CbPS7W1@L4T9+1*t4^!m*(dYhvLjaiOO@zoAfZM!D5Lp3eHg5uiZUEip4TjJK zkhOUOA(%TcJr|9<=E=r%hkQTNy0j6agOS%%`1l6o9icS7!Hx)tSUf!Idye) z{dojYOCcvc&4e!Z?_%Ndwhk07d0|5dWr1?CN2|&zaM;=s>7l4Tr zK@H|{H6! nN?Wy+ZFRuvfYpKjp##4GQOO3InXUWb00000NkvXXu0mjfe4N{c literal 0 HcmV?d00001 diff --git a/src/tpMain/Resource/no-img.png b/src/tpMain/Resource/no-img.png new file mode 100644 index 0000000000000000000000000000000000000000..9d06a0dc6617bccda5b5d97242261eedbe898a20 GIT binary patch literal 5422 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 literal 0 HcmV?d00001 diff --git a/src/tpMain/hubDetect.qrc b/src/tpMain/hubDetect.qrc index 52f1e65..02730c7 100644 --- a/src/tpMain/hubDetect.qrc +++ b/src/tpMain/hubDetect.qrc @@ -7,6 +7,7 @@ Resource/windows3.png Resource/windows4.png none.jpg + Resource/no-img.png ToolBarpic/3d12.png diff --git a/src/tpMain/qaddmodel.cpp b/src/tpMain/qaddmodel.cpp index 00388d0..7747eb7 100644 --- a/src/tpMain/qaddmodel.cpp +++ b/src/tpMain/qaddmodel.cpp @@ -56,4 +56,11 @@ void QAddModel::SetClearData() ui.wf_model_edit_ply->setText(""); } +void QAddModel::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui.retranslateUi(this); + } +} diff --git a/src/tpMain/qaddmodel.h b/src/tpMain/qaddmodel.h index 9c75b99..530aeef 100644 --- a/src/tpMain/qaddmodel.h +++ b/src/tpMain/qaddmodel.h @@ -25,6 +25,8 @@ public: QMap getData(); void SetClearData(); +protected: + virtual void changeEvent(QEvent *event); }; #endif // QADDMODEL_H diff --git a/src/tpMain/qshowimg.cpp b/src/tpMain/qshowimg.cpp index 783e8aa..c069ed6 100644 --- a/src/tpMain/qshowimg.cpp +++ b/src/tpMain/qshowimg.cpp @@ -19,6 +19,14 @@ Q_SLOT void QShowImg::showImg() } +void QShowImg::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui.retranslateUi(this); + } +} + void QShowImg::setPicPath(QString m_filePath /*= QString()*/) { QPixmap m_pix(m_filePath); diff --git a/src/tpMain/qshowimg.h b/src/tpMain/qshowimg.h index f656a62..96244a8 100644 --- a/src/tpMain/qshowimg.h +++ b/src/tpMain/qshowimg.h @@ -15,6 +15,8 @@ public: Q_SLOT void showImg(); signals: void sgChangeImg(); +protected: + virtual void changeEvent(QEvent *event); private: Ui::QShowImg ui; }; diff --git a/src/tpMain/qworkItemdlg.cpp b/src/tpMain/qworkItemdlg.cpp index dc67f34..d5d16ee 100644 --- a/src/tpMain/qworkItemdlg.cpp +++ b/src/tpMain/qworkItemdlg.cpp @@ -50,3 +50,11 @@ Q_SLOT void QWorkItemDlg::onOk() QDialog::accept(); } +void QWorkItemDlg::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui.retranslateUi(this); + } +} + diff --git a/src/tpMain/qworkItemdlg.h b/src/tpMain/qworkItemdlg.h index 969faf7..ac061a8 100644 --- a/src/tpMain/qworkItemdlg.h +++ b/src/tpMain/qworkItemdlg.h @@ -19,7 +19,8 @@ public: }; private: Q_SLOT void onOk(); - +protected: + virtual void changeEvent(QEvent *event); private: Ui::QWorkItemUI ui; diff --git a/src/tpMain/qworkmgrui.cpp b/src/tpMain/qworkmgrui.cpp index 4a11cc8..fae68c6 100644 --- a/src/tpMain/qworkmgrui.cpp +++ b/src/tpMain/qworkmgrui.cpp @@ -17,7 +17,7 @@ #include "qworkItemdlg.h" #include #pragma execution_character_set("utf-8") - +#define MODEL_UI_ICON_NONE ":/image/no-img" QWorkMgrUI::QWorkMgrUI(QWorkMgrCtrl *pWork, IWheelCtrl *pCtrl) : m_pCtrl(pCtrl), m_pWorkCtrl(pWork), m_ptrModel(NULL), m_ptableModel(NULL) { @@ -492,7 +492,7 @@ void QWorkMgrUI::UpdateTab2(QStringList m_strList) QString strFilePath = pModel->getPicPath(); if (strFilePath.isEmpty()) { - strFilePath = ":/image/none.jpg"; + strFilePath = MODEL_UI_ICON_NONE; } else { @@ -501,7 +501,7 @@ void QWorkMgrUI::UpdateTab2(QStringList m_strList) QPixmap pix = QPixmap(strFilePath); if (pix.isNull()) - pix = QPixmap(":/image/none.jpg"); + pix = QPixmap(MODEL_UI_ICON_NONE); QIcon icon(pix.scaled(QSize(100, 100))); QListWidgetItem* pItem = new QListWidgetItem(icon, strName); @@ -599,6 +599,14 @@ void QWorkMgrUI::closeEvent(QCloseEvent *event) return; } +void QWorkMgrUI::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui.retranslateUi(this); + } +} + void QWorkMgrUI::setData2Show(QString str){ ui.state_lineEdit->setText(str); } diff --git a/src/tpMain/qworkmgrui.h b/src/tpMain/qworkmgrui.h index 1a24711..ec810e2 100644 --- a/src/tpMain/qworkmgrui.h +++ b/src/tpMain/qworkmgrui.h @@ -44,6 +44,7 @@ public: void UpdateTabView(QString strName, TypeSelect enTymodel); protected: virtual void closeEvent(QCloseEvent *event); + virtual void changeEvent(QEvent *event); signals: void sgShowMsg(QString str); void sgUpdatedefect(); diff --git a/tpvs17/tpMain/QAlgParamDlg.cpp b/tpvs17/tpMain/QAlgParamDlg.cpp index cb13c41..3454c5b 100644 --- a/tpvs17/tpMain/QAlgParamDlg.cpp +++ b/tpvs17/tpMain/QAlgParamDlg.cpp @@ -64,6 +64,14 @@ void QAlgParamDlg::timerEvent(QTimerEvent *event) } } +void QAlgParamDlg::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui.retranslateUi(this); + } +} + void QAlgParamDlg::setParam() { ui.checkBox->setChecked(lpGlobalConfig::instance()->algParam.m_UseBackground == 0 ? false : true); diff --git a/tpvs17/tpMain/QAlgParamDlg.h b/tpvs17/tpMain/QAlgParamDlg.h index 9f75a2c..dd989f7 100644 --- a/tpvs17/tpMain/QAlgParamDlg.h +++ b/tpvs17/tpMain/QAlgParamDlg.h @@ -12,14 +12,15 @@ public: QAlgParamDlg(QWidget *parent = Q_NULLPTR); ~QAlgParamDlg(); Q_SLOT void onButtonClicked(); + void setParam(); + void getParam(); + Q_SLOT void onChangeBG(); signals: void sgParamChange(); protected: virtual void showEvent(QShowEvent *event); virtual void timerEvent(QTimerEvent *event); - void setParam(); - void getParam(); - Q_SLOT void onChangeBG(); + virtual void changeEvent(QEvent *event); private: Ui::QAlgParamDlg ui; int m_timeID{ 0 }; diff --git a/tpvs17/tpMain/QCamSettingDlg.cpp b/tpvs17/tpMain/QCamSettingDlg.cpp index bda0e37..ce232eb 100644 --- a/tpvs17/tpMain/QCamSettingDlg.cpp +++ b/tpvs17/tpMain/QCamSettingDlg.cpp @@ -196,3 +196,11 @@ void QCamSettingDlg::EnableUI(bool b) ui.m_ImgHeight->setDisabled(!b); } +void QCamSettingDlg::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui.retranslateUi(this); + } +} + diff --git a/tpvs17/tpMain/QCamSettingDlg.h b/tpvs17/tpMain/QCamSettingDlg.h index be17a7c..3957519 100644 --- a/tpvs17/tpMain/QCamSettingDlg.h +++ b/tpvs17/tpMain/QCamSettingDlg.h @@ -22,6 +22,8 @@ public: void onShowVirtualDir(bool bShow); void EnableUI(bool b); +protected: + virtual void changeEvent(QEvent *event); private: Ui::QCamSettingDlg ui; ICoreCtrl* m_pCoreCtl{ nullptr }; diff --git a/tpvs17/tpMain/QDebugDlg.cpp b/tpvs17/tpMain/QDebugDlg.cpp index dcf0bf5..e82e9d7 100644 --- a/tpvs17/tpMain/QDebugDlg.cpp +++ b/tpvs17/tpMain/QDebugDlg.cpp @@ -111,3 +111,11 @@ Q_SLOT void QDebugDlg::onTimeOut() { emit sgTriggerCam(); } + +void QDebugDlg::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui.retranslateUi(this); + } +} diff --git a/tpvs17/tpMain/QDebugDlg.h b/tpvs17/tpMain/QDebugDlg.h index 34a2634..c8a2229 100644 --- a/tpvs17/tpMain/QDebugDlg.h +++ b/tpvs17/tpMain/QDebugDlg.h @@ -24,6 +24,8 @@ public: signals: void sgTriggerCam(); +protected: + virtual void changeEvent(QEvent *event); private: Ui::QDebugDlg ui; QTimer m_simuliter; diff --git a/tpvs17/tpMain/QModelMgrDlg.cpp b/tpvs17/tpMain/QModelMgrDlg.cpp index cb02d99..266b28c 100644 --- a/tpvs17/tpMain/QModelMgrDlg.cpp +++ b/tpvs17/tpMain/QModelMgrDlg.cpp @@ -16,7 +16,7 @@ #define WS_PICSIZE 129 //!>缩放大小 #define WS_PICSIZELIST_ITEM 100 -#define MODEL_UI_ICON_NONE ":/image/none.jpg" +#define MODEL_UI_ICON_NONE ":/image/no-img" #define MODEL_UI_ICON_LEAPER ":/image/leaper" enum EM_TYPE_PROCESSMODEL @@ -1011,3 +1011,11 @@ void QModelMgrDlg::closeEvent(QCloseEvent *event) } return; } + +void QModelMgrDlg::changeEvent(QEvent *event) +{ + if (event->type() == QEvent::LanguageChange) + { + ui.retranslateUi(this); + } +} diff --git a/tpvs17/tpMain/QModelMgrDlg.h b/tpvs17/tpMain/QModelMgrDlg.h index 3720c56..f69f736 100644 --- a/tpvs17/tpMain/QModelMgrDlg.h +++ b/tpvs17/tpMain/QModelMgrDlg.h @@ -63,8 +63,8 @@ private: protected: Q_SLOT void onButtonClicked(); virtual void showEvent(QShowEvent *event); - virtual void closeEvent(QCloseEvent *event); + virtual void changeEvent(QEvent *event); private: Ui::QModelMgrDlg ui; diff --git a/tpvs17/tpMain/QModelMgrDlg.ui b/tpvs17/tpMain/QModelMgrDlg.ui index cc2fd2f..b87d493 100644 --- a/tpvs17/tpMain/QModelMgrDlg.ui +++ b/tpvs17/tpMain/QModelMgrDlg.ui @@ -6,8 +6,8 @@ 0 0 - 985 - 691 + 1023 + 700 @@ -469,6 +469,12 @@ 129 + + + 129 + 129 + + true @@ -479,10 +485,10 @@ Qt::PlainText - :/image/none.jpg + :/image/no-img - false + true Qt::AlignCenter @@ -646,6 +652,8 @@ - + + + diff --git a/tpvs17/tpMain/QSettingDlg.cpp b/tpvs17/tpMain/QSettingDlg.cpp deleted file mode 100644 index d61a33e..0000000 --- a/tpvs17/tpMain/QSettingDlg.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include "QSettingDlg.h" - -QSettingDlg::QSettingDlg(QWidget *parent) - : QWidget(parent) -{ - ui.setupUi(this); - setWindowIcon(QIcon(":/image/leaper")); -} - -QSettingDlg::~QSettingDlg() -{ -} diff --git a/tpvs17/tpMain/QSettingDlg.h b/tpvs17/tpMain/QSettingDlg.h deleted file mode 100644 index 2500d9f..0000000 --- a/tpvs17/tpMain/QSettingDlg.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef _H_QSETTINGDLG_H_ -#define _H_QSETTINGDLG_H_ - -#include -#include "ui_QSettingDlg.h" - -class QSettingDlg : public QWidget -{ - Q_OBJECT - -public: - QSettingDlg(QWidget *parent = Q_NULLPTR); - ~QSettingDlg(); - -private: - Ui::QSettingDlg ui; -}; - -#endif diff --git a/tpvs17/tpMain/QSettingDlg.ui b/tpvs17/tpMain/QSettingDlg.ui deleted file mode 100644 index ca46dba..0000000 --- a/tpvs17/tpMain/QSettingDlg.ui +++ /dev/null @@ -1,23 +0,0 @@ - - QSettingDlg - - - QSettingDlg - - - - 0 - 0 - 400 - 300 - - - - QSettingDlg - - - - - - - diff --git a/tpvs17/tpMain/lpMainWin.cpp b/tpvs17/tpMain/lpMainWin.cpp index d65f052..4b8713f 100644 --- a/tpvs17/tpMain/lpMainWin.cpp +++ b/tpvs17/tpMain/lpMainWin.cpp @@ -22,12 +22,12 @@ #include "databasesql.h" #include "lpCryptokey.h" -#define VERSION_HUB "3.0.1.4" -#define VERSION_ALG "3.0.1.3" -#define UPDATE_TIME "2021-09-30" +#define VERSION_HUB "3.0.1.5" +#define VERSION_ALG "3.0.1.4" +#define UPDATE_TIME "2021-10-09" #pragma execution_character_set("utf-8") - +#define MODEL_UI_ICON_NONE ":/image/no-img" static QImage cvMat2QImage(const cv::Mat& mat) { if (mat.type() == CV_8UC1) { QImage image(mat.cols, mat.rows, QImage::Format_Indexed8); @@ -85,12 +85,6 @@ static cv::Mat QImageToMat(QImage image) { lpMainWin::lpMainWin(QWidget *parent) : QMainWindow(parent) { - {//加载语言设置 - QSettings languageSetting("hubdetect.ini", QSettings::IniFormat); - QString strLanguage = languageSetting.value("language", "Chinese").toString(); - SetLanguage(strLanguage); - } - this->setWindowIcon(QIcon(":/image/leaper")); qRegisterMetaType("TimeStruct"); onInitCoreCtrl();//初始化CoreCtrl模块 相机相关处理模块 @@ -98,7 +92,11 @@ lpMainWin::lpMainWin(QWidget *parent) ui.setupUi(this); onInitAbout(); setupTrayIcon(); - + {//加载语言设置 + QSettings languageSetting("hubdetect.ini", QSettings::IniFormat); + QString strLanguage = languageSetting.value("language", "Chinese").toString(); + SetLanguage(strLanguage); + } lpGlobalConfig::instance()->loadStandParam(); { QGridLayout *pLayout = new QGridLayout(ui.cam_win_1); @@ -130,11 +128,11 @@ lpMainWin::lpMainWin(QWidget *parent) ui.action_userManager->setVisible(false); QMenu *pToolMenu = new QMenu(this); + pToolMenu->addAction(ui.actioncamSetting); pToolMenu->addAction(ui.action_ImageCali);//图像标定 - pToolMenu->addAction(ui.action_debug); pToolMenu->addAction(ui.actionSystemSeting); - pToolMenu->addAction(ui.actioncamSetting); pToolMenu->addAction(ui.actionalgo); + pToolMenu->addAction(ui.action_debug); QToolButton* pbutton = new QToolButton(this); pbutton->setMenu(pToolMenu); @@ -1392,7 +1390,7 @@ void lpMainWin::onShowResult(Result2Ui* pRlt) scare = scareh; if (pRlt->m_strModel.isEmpty()) { lpGlobalConfig::instance()->totalUnDetectNum++; - QPixmap pix(":/image/none.jpg"); + QPixmap pix(MODEL_UI_ICON_NONE); ui.main_lb_res_model_pic->setPixmap(pix.scaled(scare - 15, scare - 15)); ui.main_lb_res_model_pic->setStyleSheet(QString("QLabel{border: 5px solid rgb(250,0,0,250);background-color: rgb(200, 200, 200);}")); diff --git a/tpvs17/tpMain/lpMainWin.ui b/tpvs17/tpMain/lpMainWin.ui index 24deb24..642c8ef 100644 --- a/tpvs17/tpMain/lpMainWin.ui +++ b/tpvs17/tpMain/lpMainWin.ui @@ -6,7 +6,7 @@ 0 0 - 1026 + 1025 704 diff --git a/tpvs17/tpMain/tpMain.vcxproj b/tpvs17/tpMain/tpMain.vcxproj index bc5051d..11fe0b3 100644 --- a/tpvs17/tpMain/tpMain.vcxproj +++ b/tpvs17/tpMain/tpMain.vcxproj @@ -162,9 +162,6 @@ true - - true - true @@ -297,9 +294,6 @@ true - - true - true @@ -336,7 +330,6 @@ - @@ -430,16 +423,6 @@ .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DTPMAIN_LIB -DTPMAIN_EXPORTS -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_SQL_LIB -DQT_PRINTSUPPORT_LIB -DQT_NETWORK_LIB -DQT_SERIALPORT_LIB -DQT_WEBSOCKETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\ActiveQt" "-I$(QTDIR)\include\QtSerialPort" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSql" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtWebSockets" "-I.\..\..\src\algorithm" "-I.\..\..\src\tpMain" "-I.\..\..\src\tpMain\thread" "-I.\..\..\src\tpMain\splashScreen" "-I.\..\..\src\tpMain\LightBoxwidget" "-I.\..\..\src\tpMain\QDiskCleanThread" "-I.\..\..\src\tpMain\QPixmapListBar" "-I.\..\..\src\userCtrl" "-I.\..\..\src\NetWheel" "-I.\..\..\3part\libzkq\include" "-I.\..\..\3part\tadpole\include\tpBase" "-I.\..\..\3part\opencv3.4.1\include" "-I.\..\..\3part\opencv3.4.1\include\opencv" "-I.\..\..\3part\opencv3.4.1\include\opencv2" "-I.\..\..\3part\edcircle\include" "-I.\..\..\3part\lpCoreCtrl\include" "-I.\..\..\src\tpMain\algela" "-I.\..\..\src\ImageCompare" "-I.\..\..\src\interface" "-I.\lpRawTcp" "-I.\..\..\src\tpMain\cryptokey" "-I.\..\..\3part\RsaCrypto\include" "-I.\..\..\3part\openssl-1.0.2n\vs13\include" "-I.\..\..\3part\lp_libtcp\include" - - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_CORE_LIB -DTPMAIN_LIB -DTPMAIN_EXPORTS -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_SQL_LIB -DQT_PRINTSUPPORT_LIB -DQT_NETWORK_LIB -DQT_SERIALPORT_LIB -D_WINDOWS -DQT_WEBSOCKETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\ActiveQt" "-I$(QTDIR)\include\QtSerialPort" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSql" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtWebSockets" "-I.\..\..\src\algorithm" "-I.\..\..\src\tpMain" "-I.\..\..\src\tpMain\thread" "-I.\..\..\src\tpMain\splashScreen" "-I.\..\..\src\tpMain\LightBoxwidget" "-I.\..\..\src\tpMain\QDiskCleanThread" "-I.\..\..\src\tpMain\QPixmapListBar" "-I.\..\..\src\userCtrl" "-I.\..\..\src\NetWheel" "-I.\..\..\3part\libzkq\include" "-I.\..\..\3part\tadpole\include\tpBase" "-I.\..\..\3part\opencv3.4.1\include" "-I.\..\..\3part\opencv3.4.1\include\opencv" "-I.\..\..\3part\opencv3.4.1\include\opencv2" "-I.\..\..\3part\edcircle\include" "-I.\..\..\3part\lpCoreCtrl\include" "-I.\..\..\src\tpMain\algela" "-I.\..\..\src\ImageCompare" "-I.\..\..\src\interface" "-I.\lpRawTcp" "-I.\..\..\src\tpMain\cryptokey" "-I.\..\..\3part\RsaCrypto\include" "-I.\..\..\3part\openssl-1.0.2n\vs13\include" "-I.\..\..\3part\lp_libtcp\include" - $(QTDIR)\bin\moc.exe;%(FullPath) - Moc%27ing %(Identity)... - .\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -DUNICODE -DWIN32 -DWIN64 -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DTPMAIN_LIB -DTPMAIN_EXPORTS -DQT_GUI_LIB -DQT_WIDGETS_LIB -DQT_SQL_LIB -DQT_PRINTSUPPORT_LIB -DQT_NETWORK_LIB -DQT_SERIALPORT_LIB -DQT_WEBSOCKETS_LIB -D%(PreprocessorDefinitions) "-I." "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(ConfigurationName)" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\ActiveQt" "-I$(QTDIR)\include\QtSerialPort" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtSql" "-I$(QTDIR)\include\QtNetwork" "-I$(QTDIR)\include\QtWebSockets" "-I.\..\..\src\algorithm" "-I.\..\..\src\tpMain" "-I.\..\..\src\tpMain\thread" "-I.\..\..\src\tpMain\splashScreen" "-I.\..\..\src\tpMain\LightBoxwidget" "-I.\..\..\src\tpMain\QDiskCleanThread" "-I.\..\..\src\tpMain\QPixmapListBar" "-I.\..\..\src\userCtrl" "-I.\..\..\src\NetWheel" "-I.\..\..\3part\libzkq\include" "-I.\..\..\3part\tadpole\include\tpBase" "-I.\..\..\3part\opencv3.4.1\include" "-I.\..\..\3part\opencv3.4.1\include\opencv" "-I.\..\..\3part\opencv3.4.1\include\opencv2" "-I.\..\..\3part\edcircle\include" "-I.\..\..\3part\lpCoreCtrl\include" "-I.\..\..\src\tpMain\algela" "-I.\..\..\src\ImageCompare" "-I.\..\..\src\interface" "-I.\lpRawTcp" "-I.\..\..\src\tpMain\cryptokey" "-I.\..\..\3part\RsaCrypto\include" "-I.\..\..\3part\openssl-1.0.2n\vs13\include" "-I.\..\..\3part\lp_libtcp\include" - $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... @@ -515,7 +498,6 @@ - @@ -1158,18 +1140,6 @@ "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - - - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) - Uic%27ing %(Identity)... - .\GeneratedFiles\ui_%(Filename).h;%(Outputs) - "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" - - $(QTDIR)\bin\uic.exe;%(AdditionalInputs) diff --git a/tpvs17/tpMain/tpMain.vcxproj.filters b/tpvs17/tpMain/tpMain.vcxproj.filters index 91d0331..fafb81b 100644 --- a/tpvs17/tpMain/tpMain.vcxproj.filters +++ b/tpvs17/tpMain/tpMain.vcxproj.filters @@ -358,9 +358,6 @@ Generated Files\Release - - Source Files - ImageCompare @@ -609,9 +606,6 @@ Generated Files - - Generated Files - ImageCompare @@ -782,12 +776,6 @@ lpMain - - Header Files - - - Form Files - BaseUILib\ImgView