Java基本数据类型 ClickHouse NTFS权限 程序设计 map遍历 WorldCloud oracle macos mvvm unicode import triggers usb react脚手架 河南普通话考试 oracle查询所有数据库 less比较级 winbox使用教程 input边框颜色 android自定义控件 python中assert python中的def python中items python函数参数 python用什么ide python处理json文件 python传参 java语言学习 java获取当前月份 java初级教程 java时间格式 linux命令行 sql实例 莫愁脚本 莫莫小工具 德鲁伊武器 不寻常的指南针 机械下载 计算机操作系统第四版 主板排名天梯图
当前位置: 首页 > 学习教程  > 编程语言

Qt 实现 打开 文件/文件夹 同一个接口

2020/9/19 15:43:58 文章标签:

   打开 文件/文件夹 需要两个函数分别实现

//-----------------------------------------------
void SLot_OpenDicomFolder() {
    QSettings s;
    QString p = s.value(OPEN_DIR_PATH, ".").toString();
    p = QFileDialog::getExistingDirectory(this, tr("Open dicom directory"), p);
    if (!p.isEmpty()) {
        s.setValue(OPEN_DIR_PATH, p);
        ui->thumbnailBar->setImagePaths(QStringList() << p);
    }
}

//-----------------------------------------------
void Slot_OpenDicomFile() {
    QSettings s;
    QString p = s.value(OPEN_FILE_PATH).toString();
    QStringList fs = QFileDialog::getOpenFileNames(this, tr("Open dicom files"), p);
    if (!fs.isEmpty()) {
        s.setValue(OPEN_DIR_PATH, fs.first());
        ui->thumbnailBar->setImagePaths(fs);
    }
}

   把每一个 path当成目录,如果不存在就是文件,存在的话向下遍历。

void appendImagePaths(const QStringList &paths, bool clear_old) {
    QStringList path_list = paths;
    QStringList files;
    QStringList unloaded_files;
    while (!path_list.isEmpty()) {
        QString p = path_list.takeFirst();
        QDir dir(p);
        if (dir.exists()) {
            QStringList subs = dir.entryList(QDir::Files);
            foreach (const QString &s, subs) {
                files += p + QDir::separator() + s;
            }
            subs = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
            foreach (const QString &s, subs) {
                path_list += p + QDir::separator() + s;
            }
        } else {
            files += p;
        }
    }
    if (clear_old) {
        unloaded_files = files;
        clear();
    } else {
        foreach (const QString &file, files) {
            bool found = false;
            foreach (DicomImageLabel *label, imageLabelList) {
                if (label->HasImage(file)) {
                    found = true;
                    break;
                }
            }
            if (!found) {
                unloaded_files << file;
            }
        }
    }
    ImageLoadThread *t = new ImageLoadThread(unloaded_files);
    connect(t, &ImageLoadThread::resultReady,
            this, &ThumbnailBarWidget::Slot_ImageReady);
    connect(t, &FileWatcherThread::finished,
            t, &FileWatcherThread::deleteLater);
    t->start();
}

本文链接: http://www.dtmao.cc/news_show_200295.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?