feat: add volume measure UI display logic

This commit is contained in:
kradchen
2025-07-15 09:33:18 +08:00
parent 56f14ab9e1
commit 0a89861b75
4 changed files with 654 additions and 414 deletions

View File

@@ -284,3 +284,14 @@ QProgressBar::chunk {
ConfigurationDialog#PacsConfigurationDialog{ ConfigurationDialog#PacsConfigurationDialog{
border:1px solid #5a5a5a; border:1px solid #5a5a5a;
} }
QLabel#VolumeMeasure{
color: white;
margin-left: 3px;
margin-right: 3px;
border: 1px solid #aaa;
border-radius: 3px;
margin-top: 3px;
margin-bottom: 3px;
}

View File

@@ -2,6 +2,7 @@
#include "DefaultToolBar.h" #include "DefaultToolBar.h"
#include <QToolButton> #include <QToolButton>
#include <QLabel>
#include <QMenu> #include <QMenu>
#include <QButtonGroup> #include <QButtonGroup>
#include <QActionGroup> #include <QActionGroup>
@@ -45,6 +46,7 @@ DefaultToolBar::DefaultToolBar(QWidget *parent) : QToolBar(parent)
, mBtnPan(new QToolButton(this)) , mBtnPan(new QToolButton(this))
, mBtnZoom(new QToolButton(this)) , mBtnZoom(new QToolButton(this))
, mBtnMeasure(new QToolButton(this)) , mBtnMeasure(new QToolButton(this))
, mLblMeasure(new QLabel(this))
, mBtnClear(new QToolButton(this)) , mBtnClear(new QToolButton(this))
, mBtnFlip(new QToolButton(this)) , mBtnFlip(new QToolButton(this))
, mBtnCine(new QToolButton(this)) , mBtnCine(new QToolButton(this))
@@ -60,6 +62,11 @@ DefaultToolBar::DefaultToolBar(QWidget *parent) : QToolBar(parent)
, mActionMaximize(nullptr) , mActionMaximize(nullptr)
, mActionClose(nullptr) , mActionClose(nullptr)
, mActionFullScreen(nullptr) , mActionFullScreen(nullptr)
, mActionHideAnnotations(nullptr)
, mActionHideReferenceLine(nullptr)
, mActionHideMeasure(nullptr)
, mActionHidePatData(nullptr)
, mActionVolumeDetail(nullptr)
{ {
//init icons //init icons
mManualIcon.addFile(SYNC_MANUAL_URL); mManualIcon.addFile(SYNC_MANUAL_URL);
@@ -87,7 +94,15 @@ void DefaultToolBar::changePseudoColor(bool on)
void DefaultToolBar::resetToolbarMode(bool aHasSeries) void DefaultToolBar::resetToolbarMode(bool aHasSeries)
{ {
if (aHasSeries)mBtnSlice->click(); if (aHasSeries){
mActionVolumeDetail->setVisible(false);
QPixmap map(std::get<0>(MEASURE_ACTIIONS[0]));
mBtnMeasure->setIcon(QIcon(map));
MeasureHelper::setMeasureType(std::get<1>(MEASURE_ACTIIONS[0]));
mBtnSlice->click();
mBtnSlice->setChecked(true);
}
} }
QAction* DefaultToolBar::addButton(QToolButton* button, const char* objectName) { QAction* DefaultToolBar::addButton(QToolButton* button, const char* objectName) {
@@ -191,6 +206,9 @@ void DefaultToolBar::initToolBarButtons() {
icon.addFile(":/InfiniteViewer/Icon/distanced.png", QSize(), QIcon::Disabled); icon.addFile(":/InfiniteViewer/Icon/distanced.png", QSize(), QIcon::Disabled);
mBtnMeasure->setIcon(icon); mBtnMeasure->setIcon(icon);
} }
mActionVolumeDetail = addWidget(mLblMeasure);
mLblMeasure->setObjectName("VolumeMeasure");
mActionVolumeDetail->setVisible(false);
auto actionClear= addButton(mBtnClear, "clear"); auto actionClear= addButton(mBtnClear, "clear");
mBtnClear->setEnabled(false); mBtnClear->setEnabled(false);
@@ -471,11 +489,13 @@ void DefaultToolBar::initMeasureButton() {
mBtnMeasure->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); mBtnMeasure->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
mBtnMeasure->setToolTip(tr("Measuring tool")); mBtnMeasure->setToolTip(tr("Measuring tool"));
mBtnMeasure->setProperty("mode",36);
connect(mBtnMeasure, &QToolButton::clicked, [=](){ connect(mBtnMeasure, &QToolButton::clicked, [=](){
if (mBtnMeasure->property("mode").toInt() == 38) int mode = mBtnMeasure->property("mode").toInt();
if (mode != 36)
{ {
emit modeChanged(38); emit modeChanged(mode);
} }
else{ else{
emit modeChanged(36); emit modeChanged(36);
@@ -493,7 +513,8 @@ void DefaultToolBar::initMeasureButton() {
mBtnMeasure->setIcon(QIcon(map)); mBtnMeasure->setIcon(QIcon(map));
emit modeChanged(36); emit modeChanged(36);
MeasureHelper::setMeasureType(std::get<1>(MEASURE_ACTIIONS[j])); MeasureHelper::setMeasureType(std::get<1>(MEASURE_ACTIIONS[j]));
mBtnMeasure->setProperty("mode",0); mBtnMeasure->setProperty("mode",36);
mActionVolumeDetail->setVisible(false);
}); });
} }
@@ -504,6 +525,13 @@ void DefaultToolBar::initMeasureButton() {
mBtnMeasure->setProperty("mode",38); mBtnMeasure->setProperty("mode",38);
emit modeChanged(38); emit modeChanged(38);
}); });
m->addAction(tr("Volume Measure"), this,[=](){
mBtnMeasure->setChecked(true);
QPixmap map(":/InfiniteViewer/Icon/volmeasure.png");
mBtnMeasure->setIcon(QIcon(map));
mBtnMeasure->setProperty("mode",39);
emit modeChanged(39);
});
m->addSeparator(); m->addSeparator();
ADD_DEL_ACTION(tr("Delete selected"), AnnotationDeleteType::DeleteSelectedAnn); ADD_DEL_ACTION(tr("Delete selected"), AnnotationDeleteType::DeleteSelectedAnn);
ADD_DEL_ACTION(tr("Delete all in current slice"), AnnotationDeleteType::DeleteSliceAnn); ADD_DEL_ACTION(tr("Delete all in current slice"), AnnotationDeleteType::DeleteSliceAnn);
@@ -511,9 +539,59 @@ void DefaultToolBar::initMeasureButton() {
mBtnMeasure->setPopupMode(QToolButton::MenuButtonPopup); mBtnMeasure->setPopupMode(QToolButton::MenuButtonPopup);
mBtnMeasure->setMenu(m); mBtnMeasure->setMenu(m);
connect(EventsCenter::Default(), &EventsCenter::VolumeMeasured, this, &DefaultToolBar::volumeMeasured, Qt::QueuedConnection);
} }
void DefaultToolBar::volumeMeasured(EventObject* aEventDetail)
{
auto map = aEventDetail->Detail;
if (!map.contains("dis1"))
{
mLblMeasure->setText("");
mActionVolumeDetail->setVisible(false);
return;
}
QString cm = tr("cm");
QString mm = tr("mm");
QString cm3= tr("cm³");
QString mm3 = tr("mm³");
QString Distance1Name = tr("Distance1");
QString Distance2Name = tr("Distance2");
QString Distance3Name= tr("Distance3");
QString VolumeName = tr("Volume");
double dis1 = map.contains("dis1")?map["dis1"].toDouble():0.0;
QString unit1 = dis1>100?cm:mm;
dis1 = dis1>100.0?(dis1/10):(dis1);
double dis2 = map.contains("dis2")?map["dis2"].toDouble():0.0;
QString unit2 = dis2>100?cm:mm;
dis2 = dis2>100.0?(dis2/10):(dis2);
double dis3 = map.contains("dis3")?map["dis3"].toDouble():0.0;
QString unit3 = dis3>100?cm:mm;
dis3 = dis3>100.0?(dis3/10):(dis3);
double volume = map.contains("Volume")?map["Volume"].toDouble():0.0;
QString unit4 = volume>10000?cm3:mm3;
volume = volume>10000.0?(volume/1000):(volume);
QString message = QString("%1: %2 %3, %4: %5 %6\n%7: %8 %9, %11: %12 %13")
.arg(Distance1Name)
.arg(dis1,0,'f',2)
.arg(unit1)
.arg(Distance2Name)
.arg(dis2,0,'f',2)
.arg(unit2)
.arg(Distance3Name)
.arg(dis3,0,'f',2)
.arg(unit3)
.arg(VolumeName)
.arg(volume,0,'f',2)
.arg(unit4);
mLblMeasure->setText(message);
mActionVolumeDetail->setVisible(true);
delete aEventDetail;
}
void DefaultToolBar::initFusionButton() { void DefaultToolBar::initFusionButton() {
mBtnFusion->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); mBtnFusion->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
mBtnFusion->setToolTip(tr("Fusion")); mBtnFusion->setToolTip(tr("Fusion"));
@@ -610,8 +688,6 @@ void DefaultToolBar::resetNeedCheckFunctionButtons(){
break; break;
} }
} }
// SyncHelper::setSyncState(DIS_SYNC);
// syncStateChanged();
} }
void DefaultToolBar::updateNeedCheckFunctionButtons(ViewFunctionState state) void DefaultToolBar::updateNeedCheckFunctionButtons(ViewFunctionState state)
@@ -662,8 +738,6 @@ void DefaultToolBar::updateNeedCheckFunctionButtons(ViewFunctionState state)
} }
mBtnFusion->setEnabled(state.canFusion); mBtnFusion->setEnabled(state.canFusion);
} }
// SyncHelper::setSyncState((SyncState)state.canSync);
// syncStateChanged();
} }
void DefaultToolBar::initScreenButtons() { void DefaultToolBar::initScreenButtons() {

View File

@@ -8,6 +8,7 @@
#include "UI/Manager/ImageViewStateCheckWorker.h" #include "UI/Manager/ImageViewStateCheckWorker.h"
class QButtonGroup; class QButtonGroup;
class QLabel;
class ExportToolButton; class ExportToolButton;
class DefaultToolBar : public QToolBar { class DefaultToolBar : public QToolBar {
@@ -50,6 +51,7 @@ private:
void initToolBarButtons(); void initToolBarButtons();
void syncStateChanged() const; void syncStateChanged() const;
void volumeMeasured(EventObject* aEventDetail);
void initFileButton(); void initFileButton();
void initImportButton(); void initImportButton();
@@ -82,6 +84,7 @@ private:
QToolButton *mBtnPan; QToolButton *mBtnPan;
QToolButton *mBtnZoom; QToolButton *mBtnZoom;
QToolButton *mBtnMeasure; QToolButton *mBtnMeasure;
QLabel* mLblMeasure;
QToolButton *mBtnClear; QToolButton *mBtnClear;
QToolButton *mBtnFlip; QToolButton *mBtnFlip;
QToolButton *mBtnCine; QToolButton *mBtnCine;
@@ -101,6 +104,7 @@ private:
QAction *mActionHideReferenceLine; QAction *mActionHideReferenceLine;
QAction *mActionHideMeasure; QAction *mActionHideMeasure;
QAction *mActionHidePatData; QAction *mActionHidePatData;
QAction *mActionVolumeDetail;
QAction* mSyncActions[3]={nullptr,nullptr,nullptr}; QAction* mSyncActions[3]={nullptr,nullptr,nullptr};
QAction* mMPRActions[3]={nullptr,nullptr,nullptr}; QAction* mMPRActions[3]={nullptr,nullptr,nullptr};
QActionGroup *mPseudocolorGroup; QActionGroup *mPseudocolorGroup;

File diff suppressed because it is too large Load Diff