文章目录
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
Constant | Value | Description |
---|---|---|
DontWatchForChanges | 0x00000001 | 不要在路径中添加文件监视器。当使用模型完成简单任务(如行编辑完成)时,这减少了开销。 |
DontResolveSymlinks | 0x00000002 | 不要在文件系统模型中解析符号链接。默认情况下,符号链接是解析的。 |
DontUseCustomDirectoryIcons | 0x00000004 | 始终使用默认目录图标。有些平台允许用户设置不同的图标。自定义图标查找会对网络或可移动驱动器造成很大的性能影响。这将在图标提供程序中相应地设置QFileIconProvider::DontUseCustomDirectoryIcons选项。 |
See also resolveSymlinks.
enum Roles
Constant | Value |
---|---|
FileIconRole | Qt::DecorationRole |
FilePathRole | Qt::UserRole + 1 |
FileNameRole | Qt::UserRole + 2 |
FilePermissions | Qt::UserRole + 3 |
属性
- nameFilterDisables: bool 隐藏或禁用未通过名称过滤器的文件
- options: Options 影响模型的各种选项
- readOnly: bool 是否允许写入文件系统
- resolveSymlinks: bool 是否应该解析符号链接 只与Windows系统相关
公共函数
- QFileSystemModel(QObject *parent = nullptr)
- virtual ~QFileSystemModel()
文件、图标
- QIcon fileIcon(const QModelIndex &index) const
- QFileIconProvider * iconProvider() const
- void setIconProvider(QFileIconProvider *provider)
- QFileInfo fileInfo(const QModelIndex &index) const
- QString fileName(const QModelIndex &index) const
- QString filePath(const QModelIndex &index) const
过滤器
- QDir::Filters filter() const
- void setFilter(QDir::Filters filters)
- bool nameFilterDisables() const
- void setNameFilterDisables(bool enable)
- QStringList nameFilters() const
- void setNameFilters(const QStringList &filters)
属性
- QModelIndex index(const QString &path, int column = 0) const
- bool isDir(const QModelIndex &index) const
- bool isReadOnly() const
- void setReadOnly(bool enable)
- QDateTime lastModified(const QModelIndex &index) const
- QModelIndex mkdir(const QModelIndex &parent, const QString &name)
- QVariant myComputer(int role = Qt::DisplayRole) const
- QFile::Permissions permissions(const QModelIndex &index) const
- QDir rootDirectory() const
- QString rootPath() const
- QModelIndex setRootPath(const QString &newPath)
- qint64 size(const QModelIndex &index) const
- QString type(const QModelIndex &index) const
选项
- QFileSystemModel::Options options() const
- bool testOption(QFileSystemModel::Option option) const
- void setOption(QFileSystemModel::Option option, bool on = true)
- void setOptions(QFileSystemModel::Options options)
修改
- bool resolveSymlinks() const
- void setResolveSymlinks(bool enable)
- bool remove(const QModelIndex &index)
- bool rmdir(const QModelIndex &index)
重新实现的公共函数
行列数、设置数据
- virtual int columnCount(const QModelIndex &parent = QModelIndex()) const override
- virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override
- virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
- virtual bool setData(const QModelIndex &idx, const QVariant &value, int role = Qt::EditRole) 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 Qt::ItemFlags flags(const QModelIndex &index) const override
- virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override
父子关系
- virtual QModelIndex parent(const QModelIndex &index) const override
- virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const override
- virtual bool canFetchMore(const QModelIndex &parent) const override
- virtual void fetchMore(const QModelIndex &parent) override
- virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const override
拖放相关
- virtual Qt::DropActions supportedDropActions() const override
- virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override
- virtual QMimeData * mimeData(const QModelIndexList &indexes) const override
- virtual QStringList mimeTypes() 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
总结
从截图可以看出,QFileSystemModel能够提取到程序的相关图标,具体实现见相关的函数。