Qt-QFileSystemModel和TreeView

        QFileSystemModel为本机的文件系统提供了一个模型,结合使用QFileSystemModel和QTreeView,可以以目录树的形式显示本机文件系统,如同Windows的资源管理器一样,使用QFileSystemModel提供的接口函数,我们可以创建目录,删除目录,重命名目录,可以获取文件名称,目录名称,,文件大小等,还可以获取文件的详细信息。要通过QFileSystemModel获取本机文件系统,需要使用QFIleSystemModel的函数setRootPath()设置一个根目录,例如:

QFIleSystemModel* model=new QFIleSystemModel(this);

model->setRootPath(QDir::currentPath()); //设置应用程序的当前目录为模型的根目录

        使用QFIleSystemModel作为模型以及QTreeView,QListView,QTableView作为主要组件而设计的示例运行时界面如下图所示。

QFIleSystemModel类 

        QFIleSystemModel为本机的文件系统提供一个模型,可以用于访问本机的文件系统,它提供了一些接口函数,这些接口函数可以设置显示选项,获取文件信息,以及创建或删除文件夹等,

1,设置根目录

        函数setRootPath()设置一个根目录,QFIleSystemModel模型就只显示这个根目录下的文件系统。

QModelIndex setRootPath(const QString &newPath)

        有两个函数用于返回QFIleSystemModel的当前根目录

QDir rootDirectory()       //以QDir类型返回当前模型的根目录

QString rootPath()        //以QString类型返回当前模型的根目录

        用函数index ()可以根据完整的目录或文件名字符串,返回目录或文件系统模型中的模型索引。

QModelIndex index(const QString &path ,int column=0)    //返回目录或文件的模型索引

2,设置模型选项

(1),模型项的过滤器,函数setFilter()用于设置一个过滤器,以控制QFIleSystemModel模型包含的文件系统的项的类型,例如是否显示文件,是否显示隐藏文件等,其函数原型如下

void setFilter(QDir::Filters filters)           //设置模型数据项过滤器

参数filters是标志类型,是枚举类型QDir::Filter的枚举值组合。QDir::Filter的常见枚举值如下:

QDir::AllDirs列出所有目录,函数setFilter()设置的过滤器必须包含这个选项。
QDir::Files列出所有文件。
QDir::Drives列出驱动器。
QDir::NoDotAndDotDot不列出目录下的" . "和“ .. ”特殊项。
QDir::Hidden列出隐藏文件。
QDir::System列出系统文件

(2),文件名过滤器。如果函数setFilter()设置的过滤器允许列出文件,就可以用函数setNameFilter()设置文件名过滤器,使模型只显示特定类型的文件,例如只显示文件名后缀为.jpg的文件。

void setNameFilter(const QStringList &filters)    //设置文件名过滤器

        参数filters是允许的文件名字符串列表,一般用通配符表示。

        函数setNameFilterDisables()可以设置未通过文件名过滤器过滤项的显示方式,定义如下:

void setNameFilterDisables(bool enable)

        如果参数enable设置为true,未通过文件名过滤器过滤的项只是被设置为禁用,如果参数enables为false,未通过文件名过滤器过滤的项就被隐藏。

(3),模型选择。函数setOption()可以设置模型的一些选项,函数定义如下:

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

参数option是枚举类型QFIleSystemModel::Option,各枚举值的含义如下。

QFileSystemModel::DontWatchForChanges:不监视文件系统的变化,默认是监视。

QFileSystemModel::DontResolveSymlinks: 不解析文件系统的符号连接项,默认是解析。

QFileSystemModel::DontUseCustomDirectoryIcons:不使用自定义的目录图标,默认是使用系统的图标。

3,获取目录和文件的信息

QFIleSystemModel可以返回模型中某个项的一些信息,有如下几个函数:

QIcon fileIcon(const QModelIndex &index)//返回项的图标

QFileInfo fileInfo(const QModelIndex &index)//返回项的文件信息

QString fileName(const QModelIndex &index)//返回不含路径的文件名或最后一级文件夹名称

QString filePath(const QModelIndex &index)//返回项的路径或包含路径的文件名

QDataTime lastModified(const QModelIndex &index)//返回项的最后修改日期

bool isDir(const QModelIndex &index)//判断项是不是一个文件夹

qint64 size(const QModelIndex &index)//返回文件的大小 (字节数),若是文件夹返回值为0

QString type(const QModelIndex &index)//返回项的类型描述文字

        这些函数都需要一个模型索引index作为输入参数,表示模型的一项。在TreeView中点击一个节点时可以获得当前节点的模型索引

4,操作目录和文件

        通过QFIleSystemModel的接口函数,可以在文件系统中创建或删除文件夹,还可以删除文件。

QModelIndex mkdir(const QModelIndex &parent,const QString &name)  //创建文件夹

bool rmdir(const QModelIndex &parent)  //删除文件夹

bool remove(const QModelIndex &parent)//删除文件

        用函数mkdir()创建一个文件夹时需要指定一个父节点,函数rmdir()用于删除模型索引index表示的文件夹,函数remove()用于删除模型索引index表示的文件

        注意!rmdir()和remove()会从实际的文件系统中删除文件夹和文件,如果不想修改文件系统,可以用函数QFIleSystemModel::setReadOnly()将模型设置为只读的。


QTreeView类

        QTreeView是用于显示树状模型的视图组件,其与QFIleSystemModel模型结合就可以显示本机的文件系统。QTreeView新定义了两个信号,在一个节点处展开子节点是会触发expanded()信号,折叠子节点时会触发collapsed()信号。在QTreeView组件上点击时,chicked()信号会传递当前节点的模型索引,通过正模型索引就可以用QFIleSystemModel类的接口函数对这个节点表示的文件夹或文件进行各种操作。

        QTreeView组件的clicked()信号只能传递当前节点的模型索引,如果QTreeView组件允许多选操作,就需要使用QItemSelectionModel选择模型,通过选择模型获取所有被选中的节点的模型索引。

代码实现

        

  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值