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)
{
emit sigMoveDone(code, dir.toStdString());
reject();
accept();
}
else
{

View File

@@ -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:

View File

@@ -86,6 +86,8 @@ public:
void activeMeasure();
void unactiveMeasure();
void deleteMeasure(EventObject* deleteType);
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() {
if (nullptr != mSeries) {
mImageViewer->DeleteSelectedMeasure();

View File

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

View File

@@ -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);

View File

@@ -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();

View File

@@ -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))
{
@@ -217,9 +223,19 @@ void QDicomViewer::initGeneralTool() {
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();
}