QDir类
一、核心概念
定位:Qt 对操作系统文件系统目录的封装类,核心作用是处理目录路径解析、遍历内容、切换目录、创建 / 删除目录,是文件浏览器开发的核心工具。
存储内容:
- 核心:目录的路径字符串(绝对 / 相对 / 特殊路径,如根路径、家目录);
- 辅助:访问 / 遍历规则(过滤规则、排序规则、文件系统行为标志);
- 注意:不存储目录下的文件列表、文件元数据、文件内容,所有目录内容均实时从文件系统读取。
QFileInfo:
- 定位:它专门用来存储单个文件 / 目录的「元信息」(比如名称、路径、大小、类型、修改时间等)与QDir搭配着使用,你可以把它理解成:
QDir负责 “遍历目录拿到所有文件 / 目录的清单”,而QFileInfo就是清单里 “每一行的详细信息”,是实现文件浏览器中 “展示文件属性、区分文件 / 目录” 的关键。
entryInfoList(const QStringList &nameFilters, QDir::Filters filters, QDir::SortFlags sort) 名称 + 类型过滤 + 排序 Dialog::Dialog(QWidget *parent) : QDialog(parent) { setWindowTitle("QDir综合应用"); resize(500, 400); layout = new QVBoxLayout(); lineEdit = new QLineEdit("/"); fileListWidget = new QListWidget(); layout->addWidget(lineEdit); layout->addWidget(fileListWidget); setLayout(layout); QString root = "/"; QDir rootDir(root); QStringList strList; strList << "*";//匹配所有文件与目录 QFileInfoList list = rootDir.entryInfoList(strList);//获取当前目录下所有的文件信息并存储在list当中 }
二、相关API
QDir(const QString &path) 构造函数,绑定路径 QDir::rootPath() 获取系统根路径 QDir::currentPath() 获取程序工作目录 setPath(const QString &path) 重置绑定的路径 absolutePath() 获取标准化绝对路径
三、目录切换
cd(const QString &subDir) 切换到子目录(相对路径) cdUp() 返回上级目录 逻辑公式:新路径 = QDir(当前路径).cd(子目录名).absolutePath()
void Dialog::disDirShow(QListWidgetItem *item) { QDir dir;//初始化一个空的目录 QString str = item->text();//获取当前目录下一个文件的文件名 dir.setPath(lineEdit->text());//lineEdit是当前的绝对目录 dir.cd(str);//加上文件名,成为子目录 lineEdit->setText(dir.absolutePath()); }
四、目录遍历
核心函数:entryInfoList(nameFilters, filters, sort)
名称过滤(nameFilters) {"*"} 匹配所有文件 / 目录 QStringList类型 {"*.png", "*.jpg"} 仅匹配图片文件 {"test*"} 匹配以 test 开头的文件 类型过滤(filters) `QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoHidden` 显示文件 + 目录,排除 ./..和隐藏文件`QDir::Dirs | QDir::NoDotAndDotDot` 仅显示目录 `QDir::Files | QDir::Readable` 仅显示可读文件 排序规则(sort) `QDir::DirsFirst | QDir::Name | QDir::Ascending` 目录优先、名称升序 QDir::Size | QDir::Descending` 按文件大小降序 QDir::Time | QDir::Ascending` 按修改时间升序 QDir dir(lineEdit->text()); QFileInfoList fileList = dir.entryInfoList( {"*"}, // 名称过滤:所有项 QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoHidden, // 类型过滤 QDir::DirsFirst | QDir::Name | QDir::Ascending // 排序规则 );void Dialog::disDir(QDir dir) { QStringList strlist; strlist << "*";//获取当前目录下的所有文件 QFileInfoList fileinfolist = dir.entryInfoList(strlist, QDir::AllEntries, QDir::DirsFirst); disFileInfoList(fileinfolist); } void Dialog::disFileInfoList(const QFileInfoList &list) { fileListWidget->clear(); for(int i = 0; i < list.count(); ++i){ QFileInfo file = list[i]; if(file.isDir()){ QString fileName = file.fileName(); QIcon png("图片路径"); QListWidgetItem *temp = new QListWidgetItem(png, fileName); fileListWidget->addItem(temp); } } }

浙公网安备 33010602011771号