Files
DCMV/DIDKit/App/MenuAction/OpenDirAction.cpp
2025-04-29 10:23:37 +08:00

54 lines
1.4 KiB
C++

#include "OpenDirAction.h"
#include <QFileDialog>
#include <QMenu>
#include <QSettings>
#include "IO/DICOM/DicomLoader.h"
#include "DICOMPropertiesStore.h"
OpenDirAction::OpenDirAction(const QString& aName,QWidget* aParent)
: QAction(aName, aParent)
{
connect(this,&QAction::triggered,this,&OpenDirAction::executeAction);
}
OpenDirAction::~OpenDirAction()
{
}
void OpenDirAction::executeAction()
{
QString cachePath = QDir::currentPath()+"/.cache";
if (!QFile::exists(cachePath))
{
QFile cache(cachePath);
cache.open(QFile::NewOnly);
cache.close();
}
QSettings setting(cachePath,QSettings::IniFormat);
QString path = QFileDialog::getExistingDirectory(menu(),
tr("Open Directory"), setting.contains("LastDir")?setting.value("LastDir").toString():QDir::currentPath(),
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
DicomLoader::InitCodecs();
setting.setValue("LastDir",path);
std::string dir = path.toStdString();
std::vector<ExtendMedicalImageProperties*> vector;
int count = 0;
DicomLoader::readPropertiesFromDir(dir,vector, count);
DicomLoader::FinalizeCodecs();
if( vector.empty()){
emit dataLoaded(false);
return;
}
DICOMPropertiesStore::GetInstance()->reset();
for (auto item : vector) {
DICOMPropertiesStore::GetInstance()->addProperty(item);
}
emit dataLoaded(true);
}