qt QFileSystemModel详解
1、概述
QFileSystemModel是Qt框架中的一个关键类,它继承自QAbstractItemModel,专门用于在Qt应用程序中展示文件系统的数据。这个模型提供了一个方便的接口,使得开发者可以轻松地在应用程序中集成文件和目录的树形结构,并通过视图组件(如QTreeView、QListView等)展示给用户。QFileSystemModel与操作系统文件系统交互,将文件和目录的层次结构转换为数据模型,从而实现了文件系统的可视化。
2、重要方法
QFileSystemModel提供了一系列重要的方法,用于管理和展示文件系统数据。以下是一些常用的方法:
- setRootPath(const QString& path):设置文件系统的根路径。
- rowCount(const QModelIndex& parent = QModelIndex()) const:返回指定父索引下的子项行数。
- columnCount(const QModelIndex& parent = QModelIndex()) const:返回指定父索引下的列数(对于QFileSystemModel,通常只有一列)。
- data(const QModelIndex& index, int role = Qt::DisplayRole) const:返回指定索引处的数据,role参数指定了数据的类型(如文件名、文件大小等)。
- index(int row, int column, const QModelIndex& parent = QModelIndex()) const:返回指定行和列处的索引。
- fileName(const QModelIndex& index) const:返回指定索引处的文件名。
- filePath(const QModelIndex& index) const:返回指定索引处的文件路径。
- isDir(const QModelIndex& index) const:判断指定索引处是否为目录。
- size(const QModelIndex& index) const:返回指定索引处文件的大小(以字节为单位)。
- type(const QModelIndex& index) const:返回指定索引处文件的类型(如“文件”、“目录”等)。
- setNameFilters(const QStringList& filters):设置文件类型过滤器,只显示符合过滤条件的文件。
3、重要信号
QFileSystemModel还发出了一些重要的信号,用于通知视图或其他组件文件系统的变化。以下是一些常用的信号:
- directoryLoaded(const QString& path):当指定目录加载完成时发出。
- fileRenamed(const QString &path, const QString &oldName, const QString &newName):当文件重命名时发出信号。
- rootPathChanged(const Qstring &newPath):当根路径改变时发出信号。
- rowsInserted(const QModelIndex &parent, int first, int last):当行被插入时发出信号。
- rowsRemoved(const QModelIndex &parent, int first, int last):当行被移除时发出信号。
4、文件过滤器
- QDir::Filters 枚举定义了文件过滤器选项:
- QDir::Dirs:显示目录。
- QDir::Files:显示文件。
- QDir::NoSymLinks:不显示符号链接。
- QDir::Drives:显示驱动器。
- QDir::NoDotAndDotDot:不显示·和.
- QDir::AllDirs:显示所有目录。
- QDir::Readable:显示可读的文件。
- QDir::Writable:显示可写的文件。
- QDir::Executable:显示可执行的文件。
5、文件排序
- QDir::SortFlags 枚举定义了文件排序方式
- QDir::Name:按名称排序。
- QDir::Time:按时间排序。
- QDir::Size:按大小排序。
- QDir::Type:按类型排序。
- QDir::Unsorted:不排序。
- QDir::DirsFirst:目录排在前面。
- QDir::DirsLast:目录排在后面。
- QDir::IgnoreCase:忽略大小写。
- QDir::LocaleAware:根据区域设置排序。
#include <QApplication>
#include <QTreeView>
#include <QFileSystemModel>
#include <QDir>
#include <QDebug>int main(int argc, char *argv[]) {QApplication a(argc, argv);// 创建一个QFileSystemModel对象QFileSystemModel model;// 设置文件系统的根路径为当前工作目录QString rootPath = QDir::currentPath();model.setRootPath(rootPath);// 创建一个QTreeView对象,并将QFileSystemModel设置为其模型QTreeView treeView;treeView.setModel(&model);// 设置QTreeView的根索引为模型的根目录索引QModelIndex rootIndex = model.index(rootPath);treeView.setRootIndex(rootIndex);// 打印根路径下的子文件和子文件夹名int rowCount = model.rowCount(rootIndex);for (int i = 0; i < rowCount; ++i) {QModelIndex childIndex = model.index(i, 0, rootIndex);QString childName = model.fileName(childIndex);qDebug() << "Child Name:" << childName;}treeView.setWindowTitle("File System Viewer");treeView.show();return a.exec();
}
觉得有帮助的话,打赏一下呗。。