From 08143d46b801b6eca4c965faa6c39bc4ac418921 Mon Sep 17 00:00:00 2001 From: kradchen Date: Mon, 7 Jul 2025 10:17:25 +0800 Subject: [PATCH] feat: improve toolbar open and open from PACS logic when measuring --- src/src/PACS/Widget/importwidget.cpp | 2 +- src/src/UI/Manager/ImageViewManager.cpp | 9 ++++ src/src/UI/Manager/ImageViewManager.h | 2 + .../UI/Widget/ImageView/dicomimageview.cpp | 6 +++ src/src/UI/Widget/ImageView/dicomimageview.h | 2 + src/src/UI/Widget/ToolBar/DefaultToolBar.cpp | 5 +++ src/src/UI/Widget/ToolBar/DefaultToolBar.h | 1 + src/src/UI/Window/QDicomViewer.cpp | 41 ++++++++++++++++--- 8 files changed, 61 insertions(+), 7 deletions(-) diff --git a/src/src/PACS/Widget/importwidget.cpp b/src/src/PACS/Widget/importwidget.cpp index f468bac..3eeabda 100644 --- a/src/src/PACS/Widget/importwidget.cpp +++ b/src/src/PACS/Widget/importwidget.cpp @@ -721,7 +721,7 @@ void ImportWidget::moveDone(int code, QString dir) if(code == 0) { emit sigMoveDone(code, dir.toStdString()); - reject(); + accept(); } else { diff --git a/src/src/UI/Manager/ImageViewManager.cpp b/src/src/UI/Manager/ImageViewManager.cpp index b4ee874..862d305 100644 --- a/src/src/UI/Manager/ImageViewManager.cpp +++ b/src/src/UI/Manager/ImageViewManager.cpp @@ -417,6 +417,15 @@ void ImageViewManager::activeMeasure() { }, nullptr, nullptr, ImageViewManager::All); } +void ImageViewManager::unactiveMeasure() { + + smartDo([](auto v, auto) { + if (v->hasSeries()) { + v->unactiveMeasure(); + } + }, nullptr, nullptr, ImageViewManager::All); +} + void ImageViewManager::deleteMeasure(EventObject* deleteType){ switch (deleteType->Detail["type"].toInt()) { case AnnotationDeleteType::DeleteSelectedAnn: diff --git a/src/src/UI/Manager/ImageViewManager.h b/src/src/UI/Manager/ImageViewManager.h index 7c58360..6c80d1d 100644 --- a/src/src/UI/Manager/ImageViewManager.h +++ b/src/src/UI/Manager/ImageViewManager.h @@ -86,6 +86,8 @@ public: void activeMeasure(); + void unactiveMeasure(); + void deleteMeasure(EventObject* deleteType); void changeReconPlane(int plane); diff --git a/src/src/UI/Widget/ImageView/dicomimageview.cpp b/src/src/UI/Widget/ImageView/dicomimageview.cpp index 2e45b5f..19122be 100644 --- a/src/src/UI/Widget/ImageView/dicomimageview.cpp +++ b/src/src/UI/Widget/ImageView/dicomimageview.cpp @@ -807,6 +807,12 @@ void DicomImageView::activeMeasure(Measure *m) { } } +void DicomImageView::unactiveMeasure() { + if (nullptr != mSeries) { + mImageViewer->UnActiveMeasure(); + } +} + void DicomImageView::deleteSelectedMeasure() { if (nullptr != mSeries) { mImageViewer->DeleteSelectedMeasure(); diff --git a/src/src/UI/Widget/ImageView/dicomimageview.h b/src/src/UI/Widget/ImageView/dicomimageview.h index 09fba9f..732693e 100644 --- a/src/src/UI/Widget/ImageView/dicomimageview.h +++ b/src/src/UI/Widget/ImageView/dicomimageview.h @@ -101,6 +101,8 @@ public: //Measure void activeMeasure(Measure *m); + void unactiveMeasure(); + void deleteSelectedMeasure(); void deleteCurrentSliceMeasure(); diff --git a/src/src/UI/Widget/ToolBar/DefaultToolBar.cpp b/src/src/UI/Widget/ToolBar/DefaultToolBar.cpp index 4489b3f..22bd33a 100644 --- a/src/src/UI/Widget/ToolBar/DefaultToolBar.cpp +++ b/src/src/UI/Widget/ToolBar/DefaultToolBar.cpp @@ -85,6 +85,11 @@ void DefaultToolBar::changePseudoColor(bool on) emit setPseudoColor(table); } +void DefaultToolBar::resetToolbarMode() +{ + mBtnSlice->click(); +} + QAction* DefaultToolBar::addButton(QToolButton* button, const char* objectName) { button->setObjectName(objectName); button->setToolButtonStyle(Qt::ToolButtonIconOnly); diff --git a/src/src/UI/Widget/ToolBar/DefaultToolBar.h b/src/src/UI/Widget/ToolBar/DefaultToolBar.h index 8402f95..547375c 100644 --- a/src/src/UI/Widget/ToolBar/DefaultToolBar.h +++ b/src/src/UI/Widget/ToolBar/DefaultToolBar.h @@ -21,6 +21,7 @@ public: void updateNeedCheckFunctionButtons(ViewFunctionState state); void setViewManager(ImageViewManager* aManager); void changePseudoColor(bool on = false); + void resetToolbarMode(); signals: void openFile(); void openFolder(); diff --git a/src/src/UI/Window/QDicomViewer.cpp b/src/src/UI/Window/QDicomViewer.cpp index 8529eda..979e34a 100644 --- a/src/src/UI/Window/QDicomViewer.cpp +++ b/src/src/UI/Window/QDicomViewer.cpp @@ -203,6 +203,12 @@ void QDicomViewer::initViewOperation() { void QDicomViewer::initGeneralTool() { // open dir connect(ui->toolBar,&DefaultToolBar::openFolder, [&] { + bool needMeasureAgain = false; + // unactive measring any way + if (MeasureHelper::measuring){ + ui->viewContainer->getViewManager()->unactiveMeasure(); + needMeasureAgain = true; + } QString cachePath = QDir::currentPath()+"/.cache"; if (!QFile::exists(cachePath)) { @@ -211,15 +217,25 @@ void QDicomViewer::initGeneralTool() { cache.close(); } QSettings setting(cachePath,QSettings::IniFormat); - QString p = QFileDialog::getExistingDirectory(this, tr("Open dicom directory"), + QString p = QFileDialog::getExistingDirectory(this, tr("Open dicom directory"), setting.contains("LastDir")?setting.value("LastDir").toString():QDir::currentPath()); - if (!p.isEmpty()) { + if (!p.isEmpty()) { openDICOM(p.toLocal8Bit().toStdString(), DIR_OPEN_MODE); setting.setValue("LastDir",p); - } + } + else{ + if (needMeasureAgain) ui->viewContainer->getViewManager()->activeMeasure(); + } }); // openfile - connect(ui->toolBar,&DefaultToolBar::openFile, [&] { + connect(ui->toolBar, &DefaultToolBar::openFile, [&] + { + bool needMeasureAgain = false; + + if (MeasureHelper::measuring){ + ui->viewContainer->getViewManager()->unactiveMeasure(); + needMeasureAgain = true; + } QString cachePath = QDir::currentPath()+"/.cache"; if (!QFile::exists(cachePath)) { @@ -234,14 +250,25 @@ void QDicomViewer::initGeneralTool() { openDICOM(fn.toLocal8Bit().toStdString(), FILE_OPEN_MODE); setting.setValue("LastDir", info.absolutePath()); } - }); + else{ + if (needMeasureAgain) ui->viewContainer->getViewManager()->activeMeasure(); + } }); // import connect(ui->toolBar, &DefaultToolBar::import, this, [&] { + bool needMeasureAgain = false; + + if (MeasureHelper::measuring){ + ui->viewContainer->getViewManager()->unactiveMeasure(); + needMeasureAgain = true; + } if (nullptr == m_import) { m_import = new ImportWidget(this); connect(m_import, &ImportWidget::sigMoveDone, this, &QDicomViewer::openDICOMFromPACS); } m_import->show(); + if (m_import->result() == QDialog::Rejected){ + if (needMeasureAgain) ui->viewContainer->getViewManager()->activeMeasure(); + } }); // export connect(ui->toolBar, &DefaultToolBar::save, this, [=] { @@ -312,7 +339,6 @@ void QDicomViewer::changeColorTable(const QString& aTable) //TODO: 覆盖逻辑和增加逻辑待补充 void QDicomViewer::openDICOM(const std::string &dicomName, SeriesOpenMode openMode) { - displayThumbnailBar(true); //必须首先重置成1个窗口的布局 @@ -335,7 +361,9 @@ void QDicomViewer::openDICOM(const std::string &dicomName, SeriesOpenMode openMo if (count > 0){ ui->viewContainer->getViewManager()->viewReload(vector[0]->GetUniqueID()); } + ui->thumbnailBar->updateThumbnailBar(); + ui->toolBar->resetToolbarMode(); } void QDicomViewer::openDICOMWithLayout(const std::string &dicomName, SeriesType aSeriesType) @@ -388,4 +416,5 @@ void QDicomViewer::openDICOMWithLayout(const std::string &dicomName, SeriesType } } ui->thumbnailBar->updateThumbnailBar(); + ui->toolBar->resetToolbarMode(); }