百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

从零开始学Qt(36):QFileSystemModel的使用

liebian365 2024-11-05 11:49 18 浏览 0 评论

QFileSystemModel类的基本功能

QFileSystemModel提供了一个可用于访问本机文件系统的数据模型。QFileSystemModel和视图组件QTreeView结合使用,可以用目录树的形式显示本机上的文件系统,如同Windows的资源管理器一样。使用QFileSystemModel提供的接口函数,可以创建目录、删除目录、重命名目录,可以获得文件名称、目录名称、文件大小等参数,还可以获得文件的详细信息。

要通过QFileSystemModel获得本机的文件系统,需要用setRootPath()函数为QFileSystemModel 设置一个根目录,例如:

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

静态函数QDir::currentPath()获取应用程序的当前路径。

用于获取磁盘文件目录的数据模型类还有一个QDirModel,QDirModel的功能与QFileSystemModel 类似,也可以获取目录和文件,但是QFileSystemModel采用单独的线程获取目录文件结构,而QDirModel 不使用单独的线程。使用单独的线程不会阻碍主线程,所以推荐使用QFileSystemModel。

QFileSystemModel的一些函数获得节点的一些参数,包括以下几种:

  • bool isDir(QModelIndex &index): 判断节点是不是一个目录。
  • QString filePath(QModelIndex &index): 返回节点的目录名或带路径的文件名。
  • QString fileName(QModelIndex &index): 返回去除路径的文件夹名称或文件名。
  • QString type(QModelIndex &index): 返回描述节点类型的文字,如硬盘符是“Drive”,文 件夹是“FileFolder”,文件则用具体的后缀描述,如“txtFile”“exeFile”“pdfFile”等。
  • qint64 size(QModelIndex &index): 如果节点是文件,返回文件大小的字节数;如果节点是文件夹,返回0。

QFileSystemModel 的示例

使用QFileSystemModel作为数据模型,QTreeView、QListView和QTableView为主要组件设计的实例运行界面如下图所示。在QTreeView中以目录树的形式显示本机的文件系统, 单击一个目录时,右边的ListView和TableView显示该目录下的目录和文件。在TreeView上单击一个目录或文件节点时,下方的几个标签里显示当前节点的信息。

在主窗口类中定义了一个QFileSystemModel类的成员变量model。

QFileSystemModel *model;

主窗口构造函数进行初始化,代码如下:

Widget::Widget(QWidget *parent)
: QWidget(parent), ui(new Ui::Widget)
{
  ui->setupUi(this);
  model=new QFileSystemModel(this);
  model->setRootPath(QDir::currentPath());
  ui->treeView->setModel(model);
  ui->listView->setModel(model);
  ui->tableView->setModel(model);
  connect(ui->treeView,SIGNAL(clicked(QModelIndex)),
          ui->listView,SLOT(setRootIndex(QModelIndex)));
  connect(ui->treeView,SIGNAL(clicked(QModelIndex)),
          ui->tableView,SLOT(setRootIndex(QModelIndex)));
}

3个视图组件都使用setModel()函数,将QFileSystemModel数据模型model设置为自己的数 据模型。

connect()函数设置信号与槽的关联,实现的功能是:在单击treeView的一个节点时,此节点 就设置为listView和tableView的根节点,因为treeView的clicked(QModelIndex)信号会传递一个QModelIndex变量,是当前节点的模型索引,将此模型索引传递给listView和tableView的槽函数setRootIndex(QModelIndex),listView和tableView 就会显示此节点下的目录和文件)。

在treeView上单击一个节点时,下方的一些标签里会显示节点的一些信息,这是为treeView的clicked(const QModelIndex &index)信号编写槽函数实现的,其代码如下:

void Widget::on_treeView_clicked(const QModelIndex &index)
{
  ui->chkIsDir->setChecked(model->isDir(index));
  ui->labPath->setText(model->filePath(index));
  ui->labType->setText(model->type(index));
  ui->labFileName->setText(model->fileName(index));
  int sz=model->size(index)/1024;
  if(sz<1024)
  	ui->labFileSize->setText(QString("%1 KB").arg(sz));
  else
  	ui->labFileSize->setText(QString("%1.f MB").arg(sz/1024.0));
}

函数有一个传递参数QModelIndex &index,它是单击节点在数据模型中的索引。通过传递来的索引index,这段代码使用了获取节点信息的几个函数。

而QFileSystemModel是如何获取磁盘目录文件结构的,3个视图组件是如何显示这些数据的,则是其底层实现的问题了。

相关推荐

4万多吨豪华游轮遇险 竟是因为这个原因……

(观察者网讯)4.7万吨豪华游轮搁浅,竟是因为油量太低?据观察者网此前报道,挪威游轮“维京天空”号上周六(23日)在挪威近海发生引擎故障搁浅。船上载有1300多人,其中28人受伤住院。经过数天的调...

“菜鸟黑客”必用兵器之“渗透测试篇二”

"菜鸟黑客"必用兵器之"渗透测试篇二"上篇文章主要针对伙伴们对"渗透测试"应该如何学习?"渗透测试"的基本流程?本篇文章继续上次的分享,接着介绍一下黑客们常用的渗透测试工具有哪些?以及用实验环境让大家...

科幻春晚丨《震动羽翼说“Hello”》两万年星间飞行,探测器对地球的最终告白

作者|藤井太洋译者|祝力新【编者按】2021年科幻春晚的最后一篇小说,来自大家喜爱的日本科幻作家藤井太洋。小说将视角放在一颗太空探测器上,延续了他一贯的浪漫风格。...

麦子陪你做作业(二):KEGG通路数据库的正确打开姿势

作者:麦子KEGG是通路数据库中最庞大的,涵盖基因组网络信息,主要注释基因的功能和调控关系。当我们选到了合适的候选分子,单变量研究也已做完,接着研究机制的时便可使用到它。你需要了解你的分子目前已有哪些...

知存科技王绍迪:突破存储墙瓶颈,详解存算一体架构优势

智东西(公众号:zhidxcom)编辑|韦世玮智东西6月5日消息,近日,在落幕不久的GTIC2021嵌入式AI创新峰会上,知存科技CEO王绍迪博士以《存算一体AI芯片:AIoT设备的算力新选择》...

每日新闻播报(September 14)_每日新闻播报英文

AnOscarstatuestandscoveredwithplasticduringpreparationsleadinguptothe87thAcademyAward...

香港新巴城巴开放实时到站数据 供科技界研发使用

中新网3月22日电据香港《明报》报道,香港特区政府致力推动智慧城市,鼓励公私营机构开放数据,以便科技界研发使用。香港运输署21日与新巴及城巴(两巴)公司签署谅解备忘录,两巴将于2019年第3季度,开...

5款不容错过的APP: Red Bull Alert,Flipagram,WifiMapper

本周有不少非常出色的app推出,鸵鸟电台做了一个小合集。亮相本周榜单的有WifiMapper's安卓版的app,其中包含了RedBull的一款新型闹钟,还有一款可爱的怪物主题益智游戏。一起来看看我...

Qt动画效果展示_qt显示图片

今天在这篇博文中,主要实践Qt动画,做一个实例来讲解Qt动画使用,其界面如下图所示(由于没有录制为gif动画图片,所以请各位下载查看效果):该程序使用应用程序单窗口,主窗口继承于QMainWindow...

如何从0到1设计实现一门自己的脚本语言

作者:dong...

三年级语文上册 仿写句子 需要的直接下载打印吧

描写秋天的好句好段1.秋天来了,山野变成了美丽的图画。苹果露出红红的脸庞,梨树挂起金黄的灯笼,高粱举起了燃烧的火把。大雁在天空一会儿写“人”字,一会儿写“一”字。2.花园里,菊花争奇斗艳,红的似火,粉...

C++|那些一看就很简洁、优雅、经典的小代码段

目录0等概率随机洗牌:1大小写转换2字符串复制...

二年级上册语文必考句子仿写,家长打印,孩子照着练

二年级上册语文必考句子仿写,家长打印,孩子照着练。具体如下:...

一年级语文上 句子专项练习(可打印)

...

亲自上阵!C++ 大佬深度“剧透”:C++26 将如何在代码生成上对抗 Rust?

...

取消回复欢迎 发表评论: