模型视图(07):【类】QFileSystemModel[官翻]

QFileSystemModel 类

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

Header:#include < QFileSystemModel >
qmake:QT += widgets
Inherits:QAbstractItemModel
Inherited By:

详述

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

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

注意:QFileSystemModel需要一个QApplication的实例。

使用示例

一个显示默认目录内容的目录模型通常是用一个父对象构造的:

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

树视图可以用来显示模型的内容

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

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

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

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

缓存和性能

在调用setRootPath()之前,QFileSystemModel不会获取任何文件或目录。这将防止在此之前对文件系统进行任何不必要的查询,比如列出Windows上的驱动器。

与QDirModel不同,QFileSystemModel使用一个单独的线程来填充自己,因此它不会导致主线线程在查询文件系统时挂起。在模型填充目录之前,对rowCount()的调用将返回0。

QFileSystemModel保存一个带有文件信息的缓存。缓存使用QFileSystemWatcher自动保持最新。

请参见模型类。

公共类型

enum Option

flags Options

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

See also resolveSymlinks.

enum Roles

ConstantValue
FileIconRoleQt::DecorationRole
FilePathRoleQt::UserRole + 1
FileNameRoleQt::UserRole + 2
FilePermissionsQt::UserRole + 3

属性

  1. nameFilterDisables: bool 隐藏或禁用未通过名称过滤器的文件
  2. options: Options 影响模型的各种选项
  3. readOnly: bool 是否允许写入文件系统
  4. resolveSymlinks: bool 是否应该解析符号链接 只与Windows系统相关

公共函数

  1. QFileSystemModel(QObject *parent = nullptr)
  2. virtual ~QFileSystemModel()

文件、图标

  1. QIcon fileIcon(const QModelIndex &index) const
  2. QFileIconProvider * iconProvider() const
  3. void setIconProvider(QFileIconProvider *provider)
  4. QFileInfo fileInfo(const QModelIndex &index) const
  5. QString fileName(const QModelIndex &index) const
  6. QString filePath(const QModelIndex &index) const

过滤器

  1. QDir::Filters filter() const
  2. void setFilter(QDir::Filters filters)
  3. bool nameFilterDisables() const
  4. void setNameFilterDisables(bool enable)
  5. QStringList nameFilters() const
  6. void setNameFilters(const QStringList &filters)

属性

  1. QModelIndex index(const QString &path, int column = 0) const
  2. bool isDir(const QModelIndex &index) const
  3. bool isReadOnly() const
  4. void setReadOnly(bool enable)
  5. QDateTime lastModified(const QModelIndex &index) const
  6. QModelIndex mkdir(const QModelIndex &parent, const QString &name)
  7. QVariant myComputer(int role = Qt::DisplayRole) const
  8. QFile::Permissions permissions(const QModelIndex &index) const
  9. QDir rootDirectory() const
  10. QString rootPath() const
  11. QModelIndex setRootPath(const QString &newPath)
  12. qint64 size(const QModelIndex &index) const
  13. QString type(const QModelIndex &index) const

选项

  1. QFileSystemModel::Options options() const
  2. bool testOption(QFileSystemModel::Option option) const
  3. void setOption(QFileSystemModel::Option option, bool on = true)
  4. void setOptions(QFileSystemModel::Options options)

修改

  1. bool resolveSymlinks() const
  2. void setResolveSymlinks(bool enable)
  3. bool remove(const QModelIndex &index)
  4. bool rmdir(const QModelIndex &index)

重新实现的公共函数

行列数、设置数据

  1. virtual int columnCount(const QModelIndex &parent = QModelIndex()) const override
  2. virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override
  3. virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
  4. virtual bool setData(const QModelIndex &idx, const QVariant &value, int role = Qt::EditRole) override
  5. virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override

基本操作

  1. virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override
  2. virtual Qt::ItemFlags flags(const QModelIndex &index) const override
  3. virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override

父子关系

  1. virtual QModelIndex parent(const QModelIndex &index) const override
  2. virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const override
  3. virtual bool canFetchMore(const QModelIndex &parent) const override
  4. virtual void fetchMore(const QModelIndex &parent) override
  5. virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const override

拖放相关

  1. virtual Qt::DropActions supportedDropActions() const override
  2. virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override
  3. virtual QMimeData * mimeData(const QModelIndexList &indexes) const override
  4. virtual QStringList mimeTypes() const override

信号

  1. void directoryLoaded(const QString &path)
  2. void fileRenamed(const QString &path, const QString &oldName, const QString &newName)
  3. void rootPathChanged(const QString &newPath)

重新实现保护函数

  1. virtual bool event(QEvent *event) override
  2. virtual void timerEvent(QTimerEvent *event) override

总结

从截图可以看出,QFileSystemModel能够提取到程序的相关图标,具体实现见相关的函数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QFileSystemModel是一个专门用于显示本地文件系统的Qt模型,它继承自QAbstractItemModel。它的数据结构是一个树形结构,每个节点代表一个文件或者一个目录。QFileSystemModel的列数是固定的,包括文件名、文件大小、文件型、最后修改日期等。 如果你要删除模型中的某一列,可以通过QAbstractItemModelremoveColumn()函数实现。但是QFileSystemModel不支持removeColumn()函数,因为它的列数是固定的。因此,你需要继承QFileSystemModel,重新实现columnCount()和headerData()函数,然后在headerData()函数中移除你不需要的列的名称。下面是一个简单的示例代码: ```python class CustomFileSystemModel(QFileSystemModel): def __init__(self, parent=None): super().__init__(parent) def columnCount(self, parent=QtCore.QModelIndex()): return 3 # 仅显示前3列 def headerData(self, section, orientation, role): if role == QtCore.Qt.DisplayRole and orientation == QtCore.Qt.Horizontal: if section == 0: return "文件名" elif section == 1: return "文件大小" elif section == 2: return "最后修改日期" return super().headerData(section, orientation, role) ``` 在这个示例中,我们继承了QFileSystemModel,并且重写了columnCount()和headerData()函数。在columnCount()函数中,我们指定模型只显示前3列。在headerData()函数中,我们移除了第4列(文件型)的名称。你可以根据需要自定义显示的列数和名称。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值