QFileSystemModel Class

QFileSystemModel 类为本地文件系统提供了一个数据模型。更多

Header: #include <QFileSystemModel>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
继承: QAbstractItemModel

公共类型

enum Option { DontWatchForChanges, DontResolveSymlinks, DontUseCustomDirectoryIcons }
flags Options
enum Roles { FileIconRole, FilePathRole, FileNameRole, FilePermissions, FileInfoRole }

属性

公共函数

QFileSystemModel(QObject *parent = nullptr)
virtual ~QFileSystemModel()
QIcon fileIcon(const QModelIndex &index) const
QFileInfo fileInfo(const QModelIndex &index) const
QString fileName(const QModelIndex &index) const
QString filePath(const QModelIndex &index) const
QDir::Filters filter() const
QAbstractFileIconProvider *iconProvider() const
QModelIndex index(const QString &path, int column = 0) const
bool isDir(const QModelIndex &index) const
bool isReadOnly() const
QDateTime lastModified(const QModelIndex &index) const
(since 6.6) QDateTime lastModified(const QModelIndex &index, const QTimeZone &tz) const
QModelIndex mkdir(const QModelIndex &parent, const QString &name)
QVariant myComputer(int role = Qt::DisplayRole) const
bool nameFilterDisables() const
QStringList nameFilters() const
QFileSystemModel::Options options() const
QFileDevice::Permissions permissions(const QModelIndex &index) const
bool remove(const QModelIndex &index)
bool resolveSymlinks() const
bool rmdir(const QModelIndex &index)
QDir rootDirectory() const
QString rootPath() const
void setFilter(QDir::Filters filters)
void setIconProvider(QAbstractFileIconProvider *provider)
void setNameFilterDisables(bool enable)
void setNameFilters(const QStringList &filters)
void setOption(QFileSystemModel::Option option, bool on = true)
void setOptions(QFileSystemModel::Options options)
void setReadOnly(bool enable)
void setResolveSymlinks(bool enable)
QModelIndex setRootPath(const QString &newPath)
qint64 size(const QModelIndex &index) const
bool testOption(QFileSystemModel::Option option) const
QString type(const QModelIndex &index) const

重新实现的公共函数

virtual bool canFetchMore(const QModelIndex &parent) const override
virtual int columnCount(const QModelIndex &parent = QModelIndex()) const override
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override
virtual void fetchMore(const QModelIndex &parent) override
virtual Qt::ItemFlags flags(const QModelIndex &index) const override
virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const override
virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override
virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override
virtual QMimeData *mimeData(const QModelIndexList &indexes) const override
virtual QStringList mimeTypes() const override
virtual QModelIndex parent(const QModelIndex &index) const override
virtual QHash<int, QByteArray> roleNames() const override
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override
virtual bool setData(const QModelIndex &idx, const QVariant &value, int role = Qt::EditRole) override
virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const override
virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override
virtual Qt::DropActions supportedDropActions() const override

信号

void directoryLoaded(const QString &path)
void fileRenamed(const QString &path, const QString &oldName, const QString &newName)
void rootPathChanged(const QString &newPath)

重新实现的受保护函数

virtual bool event(QEvent *event) override
virtual void timerEvent(QTimerEvent *event) override

详细说明

该类可访问本地文件系统,提供重命名、删除文件和目录以及创建新目录的函数。在最简单的情况下,它可以与合适的显示部件一起使用,作为浏览器或过滤器的一部分。

可以使用QAbstractItemModel 提供的标准接口访问 QFileSystemModel,但它也提供了一些目录模型专用的方便函数。fileInfo(),isDir(),fileName() 和filePath() 函数提供了与模型中项目相关的底层文件和目录的信息。可以使用mkdir() 和rmdir() 创建和删除目录。

使用示例

显示默认目录内容的目录模型通常使用父对象构建:

    QFileSystemModel *model = new QFileSystemModel;
    model->setRootPath(QDir::currentPath());

树形视图可用于显示模型的内容

    QTreeView *tree = new QTreeView(splitter);
    tree->setModel(model);

并通过设置树视图的根索引来显示特定目录的内容:

    tree->setRootIndex(model->index(QDir::currentPath()));

视图的根索引可用于控制分层模型的显示程度。QFileSystemModel 提供了一个方便函数,可为模型中的目录路径返回合适的模型索引。

缓存和性能

QFileSystemModel 使用单独的线程来填充自己,因此不会导致主线程在查询文件系统时挂起。调用rowCount() 将返回0 ,直到模型填充了一个目录。QFileSystemModel 所在的线程需要运行一个事件循环来处理传入的数据。

在调用setRootPath() 之前,QFileSystemModel 不会开始填充自己。这样可以防止在此之前对系统的根文件系统进行任何不必要的查询,例如枚举 Windows 上的驱动器。

QFileSystemModel 会保留一个包含文件信息的缓存。缓存会通过QFileSystemWatcher 自动更新。

另请参阅 模型类

成员类型文档

枚举 QFileSystemModel::Option
flags QFileSystemModel::Options

常量说明
QFileSystemModel::DontWatchForChanges0x00000001不向路径添加文件监视器。这减少了使用该模型完成行编辑等简单任务时的开销。
QFileSystemModel::DontResolveSymlinks0x00000002不在文件系统模型中解析符号链接。默认情况下,会解析符号链接。
QFileSystemModel::DontUseCustomDirectoryIcons0x00000004始终使用默认目录图标。有些平台允许用户设置不同的图标。自定义图标查找会对网络或移动硬盘的性能造成很大影响。这将相应地设置图标提供程序中的 QFileIconProvider::DontUseCustomDirectoryIcons 选项。

Options 类型是QFlags<Option> 的类型定义。它存储 Option 值的 OR 组合。

另请参见 resolveSymlinks

enum QFileSystemModel::Roles

常数说明
QFileSystemModel::FileIconRoleQt::DecorationRole
QFileSystemModel::FilePathRoleQt::UserRole + 1
QFileSystemModel::FileNameRoleQt::UserRole + 2
QFileSystemModel::FilePermissionsQt::UserRole + 3
QFileSystemModel::FileInfoRoleQt::UserRole - 4索引的QFileInfo 对象

属性文档

nameFilterDisables : bool

该属性用于保存未通过名称过滤器的文件是否被隐藏或禁用。

该属性默认为true

访问功能:

bool nameFilterDisables() const
void setNameFilterDisables(bool enable)

options : Options

该属性包含影响模型的各种选项

默认情况下,所有选项都是禁用的。

在更改属性前应先设置选项。

访问功能:

QFileSystemModel::Options options() const
void setOptions(QFileSystemModel::Options options)

另请参阅 setOption() 和testOption()。

readOnly : bool

此属性表示目录模型是否允许写入文件系统

如果该属性设置为 false,目录模型将允许重命名、复制和删除文件和目录。

该属性默认为true

访问功能:

bool isReadOnly() const
void setReadOnly(bool enable)

此属性表示目录模型是否应解析符号链接

该属性仅适用于 Windows。

默认情况下,该属性为true

访问功能:

bool resolveSymlinks() const
void setResolveSymlinks(bool enable)

另请参见 QFileSystemModel::Options

成员函数文档

[explicit] QFileSystemModel::QFileSystemModel(QObject *parent = nullptr)

用给定的parent 构建文件系统模型。

[virtual noexcept] QFileSystemModel::~QFileSystemModel()

销毁该文件系统模型。

[override virtual] bool QFileSystemModel::canFetchMore(const QModelIndex &parent) const

重实现:QAbstractItemModel::canFetchMore(const QModelIndex &parent) const.

[override virtual] int QFileSystemModel::columnCount(const QModelIndex &parent = QModelIndex()) const

重实现:QAbstractItemModel::columnCount(const QModelIndex &parent) const.

[override virtual] QVariant QFileSystemModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const

重实现:QAbstractItemModel::data(const QModelIndex &index, int role) const.

另请参阅 setData().

[signal] void QFileSystemModel::directoryLoaded(const QString &path)

当收集器线程完成加载path 时,会发出该信号。

[override virtual] bool QFileSystemModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)

重实现:QAbstractItemModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent).

处理由拖放操作提供的data ,该操作以给定的action 结束,覆盖由rowcolumn 以及parent 索引指定的模型中的行。如果操作成功,则返回 true。

另请参见 supportedDropActions().

[override virtual protected] bool QFileSystemModel::event(QEvent *event)

重实现:QObject::event(QEvent *e)。

[override virtual] void QFileSystemModel::fetchMore(const QModelIndex &parent)

重实现:QAbstractItemModel::fetchMore(const QModelIndex &parent).

QIcon QFileSystemModel::fileIcon(const QModelIndex &index) const

返回模型中存储的项目图标,图标位于给定的index 下。

QFileInfo QFileSystemModel::fileInfo(const QModelIndex &index) const

根据给定的index ,返回存储在模型中的项目的QFileInfo

QString QFileSystemModel::fileName(const QModelIndex &index) const

返回模型中存储的项目的文件名,文件名位于给定的index 下。

QString QFileSystemModel::filePath(const QModelIndex &index) const

根据给定的index ,返回存储在模型中的项目的路径。

[signal] void QFileSystemModel::fileRenamed(const QString &path, const QString &oldName, const QString &newName)

每当带有oldName 的文件成功重命名为newName 时,就会发出该信号。该文件位于path 目录中。

QDir::Filters QFileSystemModel::filter() const

返回为目录模型指定的过滤器。

如果未设置过滤器,默认过滤器为QDir::AllEntries |QDir::NoDotAndDotDot |QDir::AllDirs

另请参阅 setFilter() 和QDir::Filters

[override virtual] Qt::ItemFlags QFileSystemModel::flags(const QModelIndex &index) const

重实现:QAbstractItemModel::flags(const QModelIndex &index) const.

[override virtual] bool QFileSystemModel::hasChildren(const QModelIndex &parent = QModelIndex()) const

重实现:QAbstractItemModel::hasChildren(const QModelIndex &parent) const.

[override virtual] QVariant QFileSystemModel::headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const

重实现:QAbstractItemModel::headerData(int section, Qt::Orientation orientation, int role) const.

QAbstractFileIconProvider *QFileSystemModel::iconProvider() const

返回此目录模型的文件图标提供程序。

另请参阅 setIconProvider()。

[override virtual] QModelIndex QFileSystemModel::index(int row, int column, const QModelIndex &parent = QModelIndex()) const

重实现:QAbstractItemModel::index(int row, int column, const QModelIndex &parent) const.

QModelIndex QFileSystemModel::index(const QString &path, int column = 0) const

这是一个重载函数。

返回给定pathcolumn 的模型项索引。

bool QFileSystemModel::isDir(const QModelIndex &index) const

如果模型项index 代表一个目录,则返回true ;否则返回false

QDateTime QFileSystemModel::lastModified(const QModelIndex &index) const

返回index 最后一次修改的日期和时间(本地时间)。

这是一个重载函数,相当于调用:

lastModified(index, QTimeZone::LocalTime);

如果index 无效,则返回默认构造的QDateTime

[since 6.6] QDateTime QFileSystemModel::lastModified(const QModelIndex &index, const QTimeZone &tz) const

返回tz 时区index 最后修改的日期和时间。

tz 的典型参数是QTimeZone::UTCQTimeZone::LocalTime 。UTC 不需要对本地文件系统 API 返回的时间进行任何转换,因此以 UTC 获取时间可能更快。如果要向用户显示时间,通常会选择本地时间。

如果index 无效,则返回默认构建的QDateTime

此函数在 Qt 6.6 中引入。

[override virtual] QMimeData *QFileSystemModel::mimeData(const QModelIndexList &indexes) const

重实现:QAbstractItemModel::mimeData(const QModelIndexList &indexes) 常量。

返回一个包含指定indexes 序列化描述的对象。用于描述索引对应项的格式可从mimeTypes() 函数中获取。

如果索引列表为空,则返回nullptr ,而不是序列化的空列表。

[override virtual] QStringList QFileSystemModel::mimeTypes() const

重实现:QAbstractItemModel::mimeTypes() 常量。

返回可用于描述模型中项目列表的 MIME 类型列表。

QModelIndex QFileSystemModel::mkdir(const QModelIndex &parent, const QString &name)

parent 模型索引中创建name 目录。

QVariant QFileSystemModel::myComputer(int role = Qt::DisplayRole) const

返回存储在给定role 下的 "我的电脑 "项目的数据。

另请参阅 Qt::ItemDataRole

QStringList QFileSystemModel::nameFilters() const

返回应用于模型中名称的筛选器列表。

另请参阅 setNameFilters()。

[override virtual] QModelIndex QFileSystemModel::parent(const QModelIndex &index) const

重实现:QAbstractItemModel::parent(const QModelIndex &index) const.

QFileDevice::Permissions QFileSystemModel::permissions(const QModelIndex &index) const

返回index 的 QFile::Permission 的完整 OR-ed together 组合。

bool QFileSystemModel::remove(const QModelIndex &index)

从文件系统模型中删除模型项index ,并从文件系统中删除相应文件,如果成功则返回 true。如果项目无法删除,则返回 false。

警告 此函数会从文件系统中删除文件,但不会将文件移动到可以恢复的位置。

另请参见 rmdir()。

bool QFileSystemModel::rmdir(const QModelIndex &index)

删除与文件系统模型中的模型项index 相对应的目录,并从文件系统中删除相应的目录,如果成功则返回 true。如果无法删除目录,则返回 false。

警告: 此函数将删除文件系统中的目录,但不会将其移动到可以恢复的位置。

另请参见 remove()。

[override virtual] QHash<int, QByteArray> QFileSystemModel::roleNames() const

重实现:QAbstractItemModel::roleNames() const.

QDir QFileSystemModel::rootDirectory() const

当前设置的目录

另请参见 rootPath()。

QString QFileSystemModel::rootPath() const

当前设置的根路径

另请参见 setRootPath() 和rootDirectory()。

[signal] void QFileSystemModel::rootPathChanged(const QString &newPath)

每当根路径更改为newPath 时,就会发出该信号。

[override virtual] int QFileSystemModel::rowCount(const QModelIndex &parent = QModelIndex()) const

重实现:QAbstractItemModel::rowCount(const QModelIndex &parent) const.

[override virtual] bool QFileSystemModel::setData(const QModelIndex &idx, const QVariant &value, int role = Qt::EditRole)

重实现:QAbstractItemModel::setData(const QModelIndex &index, const QVariant &value, int role)。

另请参阅 data().

void QFileSystemModel::setFilter(QDir::Filters filters)

将目录模型的过滤器设置为filters 指定的过滤器。

请注意,您设置的过滤器应始终包含QDir::AllDirs 枚举值,否则QFileSystemModel 将无法读取目录结构。

另请参阅 filter() 和QDir::Filters

void QFileSystemModel::setIconProvider(QAbstractFileIconProvider *provider)

为目录模型设置文件图标的provider

另请参阅 iconProvider()。

void QFileSystemModel::setNameFilters(const QStringList &filters)

设置要应用于现有文件的名称filters

另请参阅 nameFilters().

void QFileSystemModel::setOption(QFileSystemModel::Option option, bool on = true)

如果on 为 true,则设置启用给定的option ;否则,清除给定的option

应在更改属性前设置选项。

另请参阅 optionstestOption() 。

QModelIndex QFileSystemModel::setRootPath(const QString &newPath)

通过安装file system watcher ,将模型正在监视的目录设置为newPath 。该目录中文件和目录的任何更改都会反映在模型中。

如果路径发生变化,将发出rootPathChanged() 信号。

注意: 此函数不会改变模型的结构,也不会修改视图可用的数据。换句话说,模型的 "根 "不会改变为只包括文件系统中newPath 指定目录内的文件和目录。

另请参阅 rootPath(),QTreeView::setRootIndex() 和TreeView::rootIndex

[override virtual] QModelIndex QFileSystemModel::sibling(int row, int column, const QModelIndex &idx) const

重实现:QAbstractItemModel::sibling(int row, int column, const QModelIndex &index) const.

qint64 QFileSystemModel::size(const QModelIndex &index) const

以字节为单位返回index 的大小。如果文件不存在,则返回 0。

[override virtual] void QFileSystemModel::sort(int column, Qt::SortOrder order = Qt::AscendingOrder)

重实现:QAbstractItemModel::sort(int column, Qt::SortOrder order)。

[override virtual] Qt::DropActions QFileSystemModel::supportedDropActions() const

重实现:QAbstractItemModel::supportedDropActions() const.

bool QFileSystemModel::testOption(QFileSystemModel::Option option) const

如果给定的option 已启用,则返回true ;否则返回 false。

另请参阅 optionssetOption()。

[override virtual protected] void QFileSystemModel::timerEvent(QTimerEvent *event)

重实现:QObject::timerEvent(QTimerEvent *event).

QString QFileSystemModel::type(const QModelIndex &index) const

返回文件类型index ,如 "目录 "或 "JPEG 文件"。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.