Refactor QDicomViewer, add fusion button check logic.

This commit is contained in:
Krad
2022-07-08 17:52:30 +08:00
parent 850c888e1e
commit 206d6ba7ef
6 changed files with 564 additions and 747 deletions

View File

@@ -35,6 +35,8 @@ void ImageViewManager::add(DicomImageView *view) {
connect(view, &DicomImageView::onViewDoubleClick, connect(view, &DicomImageView::onViewDoubleClick,
this, &ImageViewManager::viewDoubleClicked); this, &ImageViewManager::viewDoubleClicked);
connect(view, &DicomImageView::afterViewCleared,this, &ImageViewManager::viewCleared);
connect(view, &DicomImageView::onDragDrop, [=](DicomImageView *view, const std::string &id) { connect(view, &DicomImageView::onDragDrop, [=](DicomImageView *view, const std::string &id) {
setCurrentView(view); setCurrentView(view);
viewReload(id); viewReload(id);
@@ -68,6 +70,7 @@ void ImageViewManager::setCurrentView(DicomImageView *view) {
currentView = view; currentView = view;
currentView->setHighlight(true); currentView->setHighlight(true);
emit currentViewChanged(currentView->getSeriesInstance()->getUniqueID()); emit currentViewChanged(currentView->getSeriesInstance()->getUniqueID());
checkCurrentViewFusion();
} }
} }
@@ -218,6 +221,11 @@ void ImageViewManager::viewReload(const std::string &unique_info) {
DicomLoader *helper = DicomLoader::GetInstance(); DicomLoader *helper = DicomLoader::GetInstance();
currentView->loadSeries(helper->getSeriesImageSet(unique_info)); currentView->loadSeries(helper->getSeriesImageSet(unique_info));
currentView->render(); currentView->render();
checkCurrentViewFusion();
}
void ImageViewManager::viewCleared() {
emit fusionCheckStateChanged(false);
} }
void ImageViewManager::setInteractionMode(int InteractionMode) { void ImageViewManager::setInteractionMode(int InteractionMode) {
@@ -292,15 +300,16 @@ void ImageViewManager::switchFusion() {
} }
} }
bool ImageViewManager::checkCurrentViewFusion() { void ImageViewManager::checkCurrentViewFusion() {
for (int i = 0; i < getViewCount(); ++i) { for (int i = 0; i < getViewCount(); ++i) {
if (getView(i) == getCurrentView()) continue; if (getView(i) == getCurrentView()) continue;
DicomImageView *overlap_view = getView(i); DicomImageView *overlap_view = getView(i);
if (currentView->checkFusion(overlap_view)) { if (currentView->checkFusion(overlap_view)) {
currentFusionView = overlap_view; currentFusionView = overlap_view;
return true; emit fusionCheckStateChanged(true);
return;
} }
} }
currentFusionView = nullptr; currentFusionView = nullptr;
return false; emit fusionCheckStateChanged(false);
} }

View File

@@ -40,7 +40,7 @@ public:
return currentView; return currentView;
} }
bool checkCurrentViewFusion(); void checkCurrentViewFusion();
int getViewCount() { int getViewCount() {
return vList.size(); return vList.size();
@@ -68,6 +68,8 @@ public:
void viewReload(const std::string &unique_info); void viewReload(const std::string &unique_info);
void viewCleared();
void setInteractionMode(int InteractionMode); void setInteractionMode(int InteractionMode);
void renderAll(); void renderAll();
@@ -103,6 +105,7 @@ public:
signals: signals:
void currentViewChanged(const std::string& seriesID); void currentViewChanged(const std::string& seriesID);
void fusionCheckStateChanged(bool able);
private: private:
QList<DicomImageView *> vList; QList<DicomImageView *> vList;

View File

@@ -194,7 +194,7 @@ void DicomImageView::scrollBarValueChanged(int slice) {
void DicomImageView::viewCleared() { void DicomImageView::viewCleared() {
resetView(); resetView();
emit afterViewClear(this); emit afterViewCleared(this);
} }
void DicomImageView::doubleClicked() { void DicomImageView::doubleClicked() {

View File

@@ -167,7 +167,7 @@ public:
signals: signals:
void afterViewClear(DicomImageView *view); void afterViewCleared(DicomImageView *view);
void onViewClick(DicomImageView *view); void onViewClick(DicomImageView *view);

File diff suppressed because it is too large Load Diff

View File

@@ -7,6 +7,8 @@
#include "customwindow.h" #include "customwindow.h"
#include "UI/Widget/Measure/pqFontPropertyWidget.h" #include "UI/Widget/Measure/pqFontPropertyWidget.h"
typedef tuple<const char *, const char *, int> ActionProperty;
/** /**
* @brief 主窗口Class * @brief 主窗口Class
* 继承自QMainWindow,主要用于显示整个界面 * 继承自QMainWindow,主要用于显示整个界面
@@ -82,7 +84,7 @@ private:
* @param dicomName DICOM文件路径 * @param dicomName DICOM文件路径
* @param openMode 文件打开方式,文件方式或文件夹方式 * @param openMode 文件打开方式,文件方式或文件夹方式
*/ */
void openAndDrawDICOM(const std::string &dicomName, SeriesOpenMode openMode); void openDICOM(const std::string &dicomName, SeriesOpenMode openMode);
/** /**
* 设置部分空间的槽函数连接 * 设置部分空间的槽函数连接
@@ -94,7 +96,7 @@ private:
*/ */
void executeActiveMeasure(); void executeActiveMeasure();
/** /**
* 为对应的DicomImageView构建对应的播放控件 * 为对应的DicomImageView构建对应的播放控件
* @param v * @param v
*/ */
@@ -121,4 +123,5 @@ private:
AnnotationActorType m_cur_measure = AnnotationActorType::RulerAnn; AnnotationActorType m_cur_measure = AnnotationActorType::RulerAnn;
void syncStateChanged() const;
}; };