feat: improve toolbar open and open from PACS logic when measuring

This commit is contained in:
kradchen
2025-07-07 10:17:25 +08:00
parent ec52a0c86c
commit 08143d46b8
8 changed files with 61 additions and 7 deletions

View File

@@ -721,7 +721,7 @@ void ImportWidget::moveDone(int code, QString dir)
if(code == 0) if(code == 0)
{ {
emit sigMoveDone(code, dir.toStdString()); emit sigMoveDone(code, dir.toStdString());
reject(); accept();
} }
else else
{ {

View File

@@ -417,6 +417,15 @@ void ImageViewManager::activeMeasure() {
}, nullptr, nullptr, ImageViewManager::All); }, 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){ void ImageViewManager::deleteMeasure(EventObject* deleteType){
switch (deleteType->Detail["type"].toInt()) { switch (deleteType->Detail["type"].toInt()) {
case AnnotationDeleteType::DeleteSelectedAnn: case AnnotationDeleteType::DeleteSelectedAnn:

View File

@@ -86,6 +86,8 @@ public:
void activeMeasure(); void activeMeasure();
void unactiveMeasure();
void deleteMeasure(EventObject* deleteType); void deleteMeasure(EventObject* deleteType);
void changeReconPlane(int plane); void changeReconPlane(int plane);

View File

@@ -807,6 +807,12 @@ void DicomImageView::activeMeasure(Measure *m) {
} }
} }
void DicomImageView::unactiveMeasure() {
if (nullptr != mSeries) {
mImageViewer->UnActiveMeasure();
}
}
void DicomImageView::deleteSelectedMeasure() { void DicomImageView::deleteSelectedMeasure() {
if (nullptr != mSeries) { if (nullptr != mSeries) {
mImageViewer->DeleteSelectedMeasure(); mImageViewer->DeleteSelectedMeasure();

View File

@@ -101,6 +101,8 @@ public:
//Measure //Measure
void activeMeasure(Measure *m); void activeMeasure(Measure *m);
void unactiveMeasure();
void deleteSelectedMeasure(); void deleteSelectedMeasure();
void deleteCurrentSliceMeasure(); void deleteCurrentSliceMeasure();

View File

@@ -85,6 +85,11 @@ void DefaultToolBar::changePseudoColor(bool on)
emit setPseudoColor(table); emit setPseudoColor(table);
} }
void DefaultToolBar::resetToolbarMode()
{
mBtnSlice->click();
}
QAction* DefaultToolBar::addButton(QToolButton* button, const char* objectName) { QAction* DefaultToolBar::addButton(QToolButton* button, const char* objectName) {
button->setObjectName(objectName); button->setObjectName(objectName);
button->setToolButtonStyle(Qt::ToolButtonIconOnly); button->setToolButtonStyle(Qt::ToolButtonIconOnly);

View File

@@ -21,6 +21,7 @@ public:
void updateNeedCheckFunctionButtons(ViewFunctionState state); void updateNeedCheckFunctionButtons(ViewFunctionState state);
void setViewManager(ImageViewManager* aManager); void setViewManager(ImageViewManager* aManager);
void changePseudoColor(bool on = false); void changePseudoColor(bool on = false);
void resetToolbarMode();
signals: signals:
void openFile(); void openFile();
void openFolder(); void openFolder();

View File

@@ -203,6 +203,12 @@ void QDicomViewer::initViewOperation() {
void QDicomViewer::initGeneralTool() { void QDicomViewer::initGeneralTool() {
// open dir // open dir
connect(ui->toolBar,&DefaultToolBar::openFolder, [&] { 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"; QString cachePath = QDir::currentPath()+"/.cache";
if (!QFile::exists(cachePath)) if (!QFile::exists(cachePath))
{ {
@@ -217,9 +223,19 @@ void QDicomViewer::initGeneralTool() {
openDICOM(p.toLocal8Bit().toStdString(), DIR_OPEN_MODE); openDICOM(p.toLocal8Bit().toStdString(), DIR_OPEN_MODE);
setting.setValue("LastDir",p); setting.setValue("LastDir",p);
} }
else{
if (needMeasureAgain) ui->viewContainer->getViewManager()->activeMeasure();
}
}); });
// openfile // 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"; QString cachePath = QDir::currentPath()+"/.cache";
if (!QFile::exists(cachePath)) if (!QFile::exists(cachePath))
{ {
@@ -234,14 +250,25 @@ void QDicomViewer::initGeneralTool() {
openDICOM(fn.toLocal8Bit().toStdString(), FILE_OPEN_MODE); openDICOM(fn.toLocal8Bit().toStdString(), FILE_OPEN_MODE);
setting.setValue("LastDir", info.absolutePath()); setting.setValue("LastDir", info.absolutePath());
} }
}); else{
if (needMeasureAgain) ui->viewContainer->getViewManager()->activeMeasure();
} });
// import // import
connect(ui->toolBar, &DefaultToolBar::import, this, [&] { connect(ui->toolBar, &DefaultToolBar::import, this, [&] {
bool needMeasureAgain = false;
if (MeasureHelper::measuring){
ui->viewContainer->getViewManager()->unactiveMeasure();
needMeasureAgain = true;
}
if (nullptr == m_import) { if (nullptr == m_import) {
m_import = new ImportWidget(this); m_import = new ImportWidget(this);
connect(m_import, &ImportWidget::sigMoveDone, this, &QDicomViewer::openDICOMFromPACS); connect(m_import, &ImportWidget::sigMoveDone, this, &QDicomViewer::openDICOMFromPACS);
} }
m_import->show(); m_import->show();
if (m_import->result() == QDialog::Rejected){
if (needMeasureAgain) ui->viewContainer->getViewManager()->activeMeasure();
}
}); });
// export // export
connect(ui->toolBar, &DefaultToolBar::save, this, [=] { connect(ui->toolBar, &DefaultToolBar::save, this, [=] {
@@ -312,7 +339,6 @@ void QDicomViewer::changeColorTable(const QString& aTable)
//TODO: 覆盖逻辑和增加逻辑待补充 //TODO: 覆盖逻辑和增加逻辑待补充
void QDicomViewer::openDICOM(const std::string &dicomName, SeriesOpenMode openMode) { void QDicomViewer::openDICOM(const std::string &dicomName, SeriesOpenMode openMode) {
displayThumbnailBar(true); displayThumbnailBar(true);
//必须首先重置成1个窗口的布局 //必须首先重置成1个窗口的布局
@@ -335,7 +361,9 @@ void QDicomViewer::openDICOM(const std::string &dicomName, SeriesOpenMode openMo
if (count > 0){ if (count > 0){
ui->viewContainer->getViewManager()->viewReload(vector[0]->GetUniqueID()); ui->viewContainer->getViewManager()->viewReload(vector[0]->GetUniqueID());
} }
ui->thumbnailBar->updateThumbnailBar(); ui->thumbnailBar->updateThumbnailBar();
ui->toolBar->resetToolbarMode();
} }
void QDicomViewer::openDICOMWithLayout(const std::string &dicomName, SeriesType aSeriesType) 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->thumbnailBar->updateThumbnailBar();
ui->toolBar->resetToolbarMode();
} }