qt c++获取文件夹下的全部图片文件并生成列表

在Qt C++中获取文件夹下的全部图片文件并生成列表,可以通过以下步骤实现。这里提供两种常用方法:

方法一:使用QDirIterator(适合递归遍历子目录)

#include <QCoreApplication>
#include <QDirIterator>
#include <QDebug>
#include <QStringList>

void getImageFiles(const QString &path, QStringList &imageList, bool recursive = false) {
    QDirIterator it(path, 
                   {"*.jpg", "*.jpeg", "*.png", "*.gif", "*.bmp"}, // 支持的图片格式
                   QDir::Files | QDir::NoDotAndDotDot, 
                   recursive ? QDirIterator::Subdirectories : QDirIterator::NoIteratorFlags);

    while (it.hasNext()) {
        imageList.append(it.next());
    }
}

int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);
    
    QString targetDir = "/path/to/your/directory"; // 替换为目标目录
    QStringList imageFiles;
    
    // 获取目录下的图片(不递归子目录)
    getImageFiles(targetDir, imageFiles);
    
    // 若需要递归子目录,使用:
    // getImageFiles(targetDir, imageFiles, true);

    // 输出结果
    qDebug() << "Found" << imageFiles.size() << "image files:";
    for (const QString &file : imageFiles) {
        qDebug() << file;
    }

    return a.exec();
}

方法二:使用QDir::entryList(适合单层目录遍历)

#include <QCoreApplication>
#include <QDir>
#include <QDebug>
#include <QStringList>

QStringList getImageFiles(const QString &path) {
    QDir dir(path);
    QStringList filters = {"*.jpg", "*.jpeg", "*.png", "*.gif", "*.bmp"};
    
    dir.setNameFilters(filters);
    dir.setFilter(QDir::Files | QDir::NoSymLinks);
    dir.setSorting(QDir::Name); // 可选排序方式
    
    return dir.entryList();
}

int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);
    
    QString targetDir = "/path/to/your/directory"; // 替换为目标目录
    QStringList imageFiles = getImageFiles(targetDir);

    // 输出结果
    qDebug() << "Found" << imageFiles.size() << "image files:";
    for (const QString &file : imageFiles) {
        qDebug() << QDir(targetDir).absoluteFilePath(file);
    }

    return a.exec();
}

关键点说明:

  1. 文件过滤
    • 通过QStringList设置支持的图片格式(可自由扩展)
    • 使用QDir::setNameFilters()QDirIterator构造函数直接传入过滤列表
  2. 遍历方式
    • QDirIterator更适合需要递归遍历子目录的场景
    • QDir::entryList适用于单层目录的快速获取
  3. 路径处理
    • 返回的路径可以是相对路径(默认)或绝对路径
    • 使用QDir::absoluteFilePath()可获取完整路径
  4. 扩展功能
    • 添加排序:dir.setSorting(QDir::Type | QDir::Time)
    • 过滤隐藏文件:dir.setFilter(QDir::Files | QDir::NoDotAndDotDot | QDir::Hidden)

注意事项:

  • 替换代码中的/path/to/your/directory为实际目录路径
  • 如需处理网络路径,建议先使用QDir::exists()检查路径有效性
  • 大目录建议使用QDirIterator的迭代方式,避免内存峰值

两种方法均可实现需求,根据具体场景选择即可。方法一更灵活适合复杂遍历,方法二代码更简洁适合简单场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值