在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();
}
关键点说明:
- 文件过滤:
- 通过
QStringList
设置支持的图片格式(可自由扩展) - 使用
QDir::setNameFilters()
或QDirIterator
构造函数直接传入过滤列表
- 通过
- 遍历方式:
QDirIterator
更适合需要递归遍历子目录的场景QDir::entryList
适用于单层目录的快速获取
- 路径处理:
- 返回的路径可以是相对路径(默认)或绝对路径
- 使用
QDir::absoluteFilePath()
可获取完整路径
- 扩展功能:
- 添加排序:
dir.setSorting(QDir::Type | QDir::Time)
- 过滤隐藏文件:
dir.setFilter(QDir::Files | QDir::NoDotAndDotDot | QDir::Hidden)
- 添加排序:
注意事项:
- 替换代码中的
/path/to/your/directory
为实际目录路径 - 如需处理网络路径,建议先使用
QDir::exists()
检查路径有效性 - 大目录建议使用
QDirIterator
的迭代方式,避免内存峰值
两种方法均可实现需求,根据具体场景选择即可。方法一更灵活适合复杂遍历,方法二代码更简洁适合简单场景。