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,
this, &ImageViewManager::viewDoubleClicked);
connect(view, &DicomImageView::afterViewCleared,this, &ImageViewManager::viewCleared);
connect(view, &DicomImageView::onDragDrop, [=](DicomImageView *view, const std::string &id) {
setCurrentView(view);
viewReload(id);
@@ -68,6 +70,7 @@ void ImageViewManager::setCurrentView(DicomImageView *view) {
currentView = view;
currentView->setHighlight(true);
emit currentViewChanged(currentView->getSeriesInstance()->getUniqueID());
checkCurrentViewFusion();
}
}
@@ -218,6 +221,11 @@ void ImageViewManager::viewReload(const std::string &unique_info) {
DicomLoader *helper = DicomLoader::GetInstance();
currentView->loadSeries(helper->getSeriesImageSet(unique_info));
currentView->render();
checkCurrentViewFusion();
}
void ImageViewManager::viewCleared() {
emit fusionCheckStateChanged(false);
}
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) {
if (getView(i) == getCurrentView()) continue;
DicomImageView *overlap_view = getView(i);
if (currentView->checkFusion(overlap_view)) {
currentFusionView = overlap_view;
return true;
emit fusionCheckStateChanged(true);
return;
}
}
currentFusionView = nullptr;
return false;
emit fusionCheckStateChanged(false);
}

View File

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

View File

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

View File

@@ -167,7 +167,7 @@ public:
signals:
void afterViewClear(DicomImageView *view);
void afterViewCleared(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 "UI/Widget/Measure/pqFontPropertyWidget.h"
typedef tuple<const char *, const char *, int> ActionProperty;
/**
* @brief 主窗口Class
* 继承自QMainWindow,主要用于显示整个界面
@@ -82,7 +84,7 @@ private:
* @param dicomName DICOM文件路径
* @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();
/**
/**
* 为对应的DicomImageView构建对应的播放控件
* @param v
*/
@@ -121,4 +123,5 @@ private:
AnnotationActorType m_cur_measure = AnnotationActorType::RulerAnn;
void syncStateChanged() const;
};