当前位置:   article > 正文

QFileSystemModel详解和使用

qfilesystemmodel

QFileSystemModel 提供了一个可用于访问本机文件系统的数据模型。
QFileSystemModel 和视图组件 QTreeView 结合使用,可以用目录树的形式显示本机上的文件系统,如同 Widnows 的资源管理器一样。使用 QFileSystemModel 提供的接口函数,可以创建目录、删除目录、重命名目录,可以获得文件名称、目录名称、文件大小等参数,还可以获得文件的详细信息。
QFileSystemModel 使用一个单独的线程来查询文件和目录以便于填充模型数据,因此它不会在查询文件系统时导致主线程挂起。

类型成员

  1. enum QFileSystemModel::Option
  • DontWatchForChanges:不要向路径添加文件观察者。当将模型用于行编辑完成等简单任务时,这会减少开销。
  • DontResolveSymlinks:不解析文件系统模型中的符号链接。
  • DontUseCustomDirectoryIcons:始终使用默认目录图标。一些平台允许用户设置不同的图标。自定义图标会对网络或可移动驱动器的性能产生重大影响。
  1. enum QFileSystemModel::Roles
  • FileIconRole:Qt::DecorationRole
  • FilePathRole:Qt::UserRole + 1
  • FileNameRole:Qt::UserRole + 2
  • FilePermissions:Qt::UserRole + 3

函数

函数说明
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
QFileIconProvider *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返回上次修改索引的日期和时间。
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
QFile::Permissions permissions(const QModelIndex &index) const
bool remove(const QModelIndex &index)从文件系统模型中删除模型项索引并从文件系统中删除相应的文件,如果成功则返回true。 如果无法删除该项目,则返回 false。
bool resolveSymlinks() const
bool rmdir(const QModelIndex &index)删除文件系统模型中模型项索引对应的目录,并从文件系统中删除对应的目录,成功则返回true。 如果无法删除目录,则返回 false。
QDir rootDirectory() const当前设置的目录。
QString rootPath() const当前设置的根路径。
void setFilter(QDir::Filters filters)设置模型的过滤器。请注意,设置的过滤器应始终包含 QDir::AllDirs 枚举值,否则 QFileSystemModel 将无法读取目录结构。
void setIconProvider(QFileIconProvider *provider)
void setNameFilterDisables(bool enable)
void setNameFilters(const QStringList &filters)设置名称过滤器以应用于现有文件。
void setOption(QFileSystemModel::Option option, bool on = true)如果 on 为true,则设置要启用的给定选项; 否则,清除给定的选项。
void setOptions(QFileSystemModel::Options options)
void setReadOnly(bool enable)
void setResolveSymlinks(bool enable)
QModelIndex setRootPath(const QString &newPath)设置观察的目录为 newPath。 对该目录中文件和目录的任何更改都将反映在模型中。如果路径发生更改,将发出 rootPathChanged() 信号。
qint64 size(const QModelIndex &index) const返回索引的字节大小。 如果文件不存在,则返回 0。
bool testOption(QFileSystemModel::Option option) const如果启用了给定的选项,则返回 true,否则返回 false。
QString type(const QModelIndex &index) const返回文件索引的类型,例如“目录”或“JPEG 文件”(“Directory” or “JPEG file”)。

使用

显示并设置过滤器

model = new QFileSystemModel(this);
QString rootpath = QCoreApplication::applicationDirPath();
rootpath = rootpath.left(rootpath.lastIndexOf("/"));
model->setRootPath(rootpath+"/Data_Files/ModuleTest");
// 设置过滤器
QStringList filter;
filter <<"*.xml" /* <<"*.png" << "*.jpg" << "*.bmp" << "*.gif" <<"*.ini" <<"*.txt" <<"*.py"*/ ;
model->setNameFilters(filter);//QStringList()<<"*1v1*.xml"
// 没有通过过滤器的文件disable还是隐藏,true为disable false为隐藏
model->setNameFilterDisables(false);
ui->treeView->setAnimated(false);
ui->treeView->setModel(model);
ui->treeView->header()->setSortIndicator(0,Qt::AscendingOrder);       //按第1列升序排序
ui->treeView->header()->setDefaultAlignment(Qt::AlignCenter);         //设置表头默认文字对齐
ui->treeView->setColumnWidth(0,1500);
ui->treeView->setRootIndex(model->index(rootpath+"/Data_Files/ModuleTest"));
ui->treeView->setSortingEnabled(true);
ui->treeView->setHeaderHidden(true);
ui->treeView->show();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

QDir::Filters

  • QDir::Dirs:列出与筛选器匹配的目录。
  • QDir::AllDirs:列出所有目录;即不将过滤器应用于目录名。
  • QDir::Files:列出文件。
  • QDir::Drives:List disk drives (ignored under Unix).
  • QDir::NoSymLinks:不要列出符号链接
  • QDir::NoDotAndDotDot:不要列出特殊条目“.”和“…”。
  • QDir::NoDot:不要列出特殊条目“.”。
  • QDir::NoDotDot:不要列出特殊条目“…”。
  • QDir::AllEntries:列出目录、文件、驱动器和符号链接
  • QDir::Readable:列出应用程序具有读取访问权限的文件。Readable值需要与Dirs或Files组合使用。
  • QDir::Writable:列出应用程序具有写访问权限的文件。“Writable”值需要与“Dirs”或“Files”组合使用。
  • QDir::Executable:列出应用程序具有执行访问权限的文件。Executable值需要与Dirs或Files组合使用。
  • QDir::Modified:仅列出已修改的文件
  • QDir::Hidden:列出隐藏文件
  • QDir::System:列出系统文件
  • QDir::CaseSensitive:过滤器应区分大小写。

QDir::Dirs显示目录文件夹。QDir::AllDirs非目录文件夹也会显示。QDir::NoDotAndDotDot表示其它文件夹不以.或…显示。

model->setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);
  • 1

隐藏后面几列:

ui->treeView->setColumnHidden(columnIndex,True);
  • 1

查找

    QPushButton* pBtnTmp = new QPushButton();
    connect(pBtnTmp,&QPushButton::clicked,ui->lineEdit_filter,&QLineEdit::clear);
    pBtnTmp->setFlat(true);
    pBtnTmp->setIcon(QIcon("://Resource/delete.svg"));
    QHBoxLayout* pEditTmpLayout = new QHBoxLayout(ui->lineEdit_filter);
    pEditTmpLayout->setSpacing(0);
    pEditTmpLayout->setMargin(0);
    pEditTmpLayout->addWidget(pBtnTmp);
    pEditTmpLayout->setAlignment(pBtnTmp,Qt::AlignVCenter | Qt::AlignRight);
    connect(ui->lineEdit_filter,&QLineEdit::textChanged,this,[&](const QString& t){
        model->setNameFilters(QStringList()<<QString("*%1*.xml").arg(t));
    });

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/764649
推荐阅读
相关标签
  

闽ICP备14008679号