文章目录
一、QFileSystemModel的基本介绍
QFileSystemModel 是 Qt 框架中用于管理和显示本地文件系统的 MVC 结构中的 Model。它可以与 QTreeView、QListView 或 QTableView 结合使用,实现文件管理功能。相比 QDirModel,QFileSystemModel 只会加载需要的目录,支持懒加载,在处理大文件夹时更高效。
主要特点:
- 继承自 QAbstractItemModel,提供标准的文件系统数据模型。
- 懒加载(Lazy Loading):不会一次性加载整个文件系统,只会加载需要的部分,提升性能。
- 支持文件过滤(setFilter()、setNameFilters())。
- 自动监听文件系统变化,实时更新 UI。
二、QFileSystemModel的基本使用
2.1 在 QTreeView 中使用
#include <QApplication>
#include <QTreeView>
#include <QFileSystemModel>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QFileSystemModel model;
model.setRootPath(QDir::homePath()); // 设置根目录
QTreeView treeView;
treeView.setModel(&model);
treeView.setRootIndex(model.index(QDir::homePath())); // 绑定视图
treeView.show();
return app.exec();
}

2.2 在 QListView 中使用
QListView listView;
listView.setModel(&model);
listView.setRootIndex(model.index(QDir::homePath()));
listView.show();

2.3 在 QTableView 中使用
QTableView tableView;
tableView.setModel(&model);
tableView.setRootIndex(model.index(QDir::homePath()));
tableView.show();

三、QFileSystemModel的常用API

3.1 设置根目录
model.setRootPath(QDir::homePath()); // 设置为用户目录
注意:setRootPath() 只是设置数据模型的根目录,并不会影响 QTreeView 显示的目录。要限制 QTreeView 的显示范围,需使用 setRootIndex()。
3.2 过滤文件
3.2.1 仅显示文件
model.setFilter(QDir::Files | QDir::NoDotAndDotDot);
QDir::Files 只显示文件,QDir::NoDotAndDotDot 过滤掉 . 和 … 目录。
3.2.2 只显示特定后缀的文件
model.setNameFilters(QStringList() << "*.cpp" << "*.h");
model.setNameFilterDisables(false); // 过滤掉不符合的文件
这将只显示 .cpp 和 .h 文件。
3.2.3 只显示目录
model.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
只显示目录,隐藏所有文件。
四、监听文件系统变化
1. QFileSystemModel常见信号

2. 信号的使用示例
2.1 监听目录加载完成
当 QFileSystemModel 完成某个目录的加载时,可以使用 directoryLoaded() 信号:
#include <QApplication>
#include <QTreeView>
#include <QFileSystemModel>
#include <QDebug>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QFileSystemModel model;
QObject::connect(&model, &QFileSystemModel::directoryLoaded,
[](const QString &path) {
qDebug() << "目录加载完成:" << path;
})

最低0.47元/天 解锁文章
963

被折叠的 条评论
为什么被折叠?



