fix: fix load from PACS crash bug and improve reload data UI logic

This commit is contained in:
kradchen
2025-07-11 15:10:41 +08:00
parent 85d01b57f5
commit a9e870c06b
3 changed files with 18 additions and 6 deletions

View File

@@ -607,6 +607,7 @@ void ImportWidget::onSeriesDoubleClicked(const QModelIndex &current)
{ {
executeCMove(current); executeCMove(current);
} }
emit beginMove();
} }
void ImportWidget::executeCMove(const QModelIndex &current) void ImportWidget::executeCMove(const QModelIndex &current)

View File

@@ -41,7 +41,7 @@ public:
signals: signals:
void sigMoveDone(int code, std::string dir); void sigMoveDone(int code, std::string dir);
void beginMove();
public slots: public slots:
void close(); void close();
void showMaximum(); void showMaximum();

View File

@@ -274,6 +274,12 @@ void QDicomViewer::initGeneralTool() {
if (nullptr == m_import) { if (nullptr == m_import) {
m_import = new ImportWidget(this); m_import = new ImportWidget(this);
connect(m_import, &ImportWidget::sigMoveDone, this, &QDicomViewer::openDICOMFromPACS); connect(m_import, &ImportWidget::sigMoveDone, this, &QDicomViewer::openDICOMFromPACS);
connect(m_import, &ImportWidget::beginMove, [=](){
ui->viewContainer->resetLayoutToSingle();
ui->viewContainer->getViewManager()->clearCurrentView();
displayThumbnailBar(false);
});
} }
m_import->show(); m_import->show();
if (m_import->result() == QDialog::Rejected){ if (m_import->result() == QDialog::Rejected){
@@ -365,10 +371,12 @@ void QDicomViewer::loadProgress(EventObject *aCalldata)
//TODO: 覆盖逻辑和增加逻辑待补充 //TODO: 覆盖逻辑和增加逻辑待补充
void QDicomViewer::openDICOM(const std::string &dicomName, SeriesOpenMode openMode) { void QDicomViewer::openDICOM(const std::string &dicomName, SeriesOpenMode openMode) {
displayThumbnailBar(true); displayThumbnailBar(false);
//必须首先重置成1个窗口的布局 //必须首先重置成1个窗口的布局
ui->viewContainer->resetLayoutToSingle(); ui->viewContainer->resetLayoutToSingle();
ui->viewContainer->getViewManager()->clearCurrentView();
this->update();
qApp->processEvents();
//reset store //reset store
ImageSetStore *helper = ImageSetStore::GetInstance(); ImageSetStore *helper = ImageSetStore::GetInstance();
@@ -387,6 +395,7 @@ void QDicomViewer::openDICOM(const std::string &dicomName, SeriesOpenMode openMo
if (count > 0){ if (count > 0){
ui->viewContainer->getViewManager()->viewReload(vector[0]->GetUniqueID()); ui->viewContainer->getViewManager()->viewReload(vector[0]->GetUniqueID());
ui->thumbnailBar->updateThumbnailBar(); ui->thumbnailBar->updateThumbnailBar();
displayThumbnailBar(true);
ui->toolBar->resetToolbarMode(true); ui->toolBar->resetToolbarMode(true);
} }
else{ else{
@@ -400,9 +409,6 @@ void QDicomViewer::openDICOM(const std::string &dicomName, SeriesOpenMode openMo
void QDicomViewer::openDICOMWithLayout(const std::string &dicomName, SeriesType aSeriesType) void QDicomViewer::openDICOMWithLayout(const std::string &dicomName, SeriesType aSeriesType)
{ {
displayThumbnailBar(true);
ui->viewContainer->viewLayoutChanged(2,2);
//reset store //reset store
ImageSetStore *helper = ImageSetStore::GetInstance(); ImageSetStore *helper = ImageSetStore::GetInstance();
helper->reset(); helper->reset();
@@ -426,6 +432,10 @@ void QDicomViewer::openDICOMWithLayout(const std::string &dicomName, SeriesType
else{ else{
selectSide = aSeriesType == LEFT_SIDE ? "L" : "R"; selectSide = aSeriesType == LEFT_SIDE ? "L" : "R";
} }
ui->viewContainer->viewLayoutChanged(2,2);
this->update();
for (int i = 0; i < count; ++i) for (int i = 0; i < count; ++i)
{ {
helper->addImageSet(vector[i]); helper->addImageSet(vector[i]);
@@ -447,6 +457,7 @@ void QDicomViewer::openDICOMWithLayout(const std::string &dicomName, SeriesType
ui->viewContainer->getViewManager()->viewReloadWithID(3, vector[i]->GetUniqueID()); ui->viewContainer->getViewManager()->viewReloadWithID(3, vector[i]->GetUniqueID());
} }
} }
displayThumbnailBar(true);
ui->thumbnailBar->updateThumbnailBar(); ui->thumbnailBar->updateThumbnailBar();
ui->toolBar->resetToolbarMode(); ui->toolBar->resetToolbarMode();
} }