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{
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 <QToolButton>
#include <QLabel>
#include <QMenu>
#include <QButtonGroup>
#include <QActionGroup>
@@ -45,6 +46,7 @@ DefaultToolBar::DefaultToolBar(QWidget *parent) : QToolBar(parent)
, mBtnPan(new QToolButton(this))
, mBtnZoom(new QToolButton(this))
, mBtnMeasure(new QToolButton(this))
, mLblMeasure(new QLabel(this))
, mBtnClear(new QToolButton(this))
, mBtnFlip(new QToolButton(this))
, mBtnCine(new QToolButton(this))
@@ -60,6 +62,11 @@ DefaultToolBar::DefaultToolBar(QWidget *parent) : QToolBar(parent)
, mActionMaximize(nullptr)
, mActionClose(nullptr)
, mActionFullScreen(nullptr)
, mActionHideAnnotations(nullptr)
, mActionHideReferenceLine(nullptr)
, mActionHideMeasure(nullptr)
, mActionHidePatData(nullptr)
, mActionVolumeDetail(nullptr)
{
//init icons
mManualIcon.addFile(SYNC_MANUAL_URL);
@@ -87,7 +94,15 @@ void DefaultToolBar::changePseudoColor(bool on)
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) {
@@ -191,6 +206,9 @@ void DefaultToolBar::initToolBarButtons() {
icon.addFile(":/InfiniteViewer/Icon/distanced.png", QSize(), QIcon::Disabled);
mBtnMeasure->setIcon(icon);
}
mActionVolumeDetail = addWidget(mLblMeasure);
mLblMeasure->setObjectName("VolumeMeasure");
mActionVolumeDetail->setVisible(false);
auto actionClear= addButton(mBtnClear, "clear");
mBtnClear->setEnabled(false);
@@ -471,11 +489,13 @@ void DefaultToolBar::initMeasureButton() {
mBtnMeasure->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
mBtnMeasure->setToolTip(tr("Measuring tool"));
mBtnMeasure->setProperty("mode",36);
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{
emit modeChanged(36);
@@ -493,7 +513,8 @@ void DefaultToolBar::initMeasureButton() {
mBtnMeasure->setIcon(QIcon(map));
emit modeChanged(36);
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);
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();
ADD_DEL_ACTION(tr("Delete selected"), AnnotationDeleteType::DeleteSelectedAnn);
ADD_DEL_ACTION(tr("Delete all in current slice"), AnnotationDeleteType::DeleteSliceAnn);
@@ -511,9 +539,59 @@ void DefaultToolBar::initMeasureButton() {
mBtnMeasure->setPopupMode(QToolButton::MenuButtonPopup);
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() {
mBtnFusion->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
mBtnFusion->setToolTip(tr("Fusion"));
@@ -610,8 +688,6 @@ void DefaultToolBar::resetNeedCheckFunctionButtons(){
break;
}
}
// SyncHelper::setSyncState(DIS_SYNC);
// syncStateChanged();
}
void DefaultToolBar::updateNeedCheckFunctionButtons(ViewFunctionState state)
@@ -662,8 +738,6 @@ void DefaultToolBar::updateNeedCheckFunctionButtons(ViewFunctionState state)
}
mBtnFusion->setEnabled(state.canFusion);
}
// SyncHelper::setSyncState((SyncState)state.canSync);
// syncStateChanged();
}
void DefaultToolBar::initScreenButtons() {

View File

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

File diff suppressed because it is too large Load Diff