Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QFileSystemModel组件实现文件管理器功能。

QFileSystemModel是Qt框架中的一个关键类,用于在Qt应用程序中管理和展示文件系统的结构。该模型提供了一个方便的接口,使得开发者可以轻松地在应用程序中集成文件和目录的树形结构,并通过视图组件(如QTreeViewQListViewQTabView等)展示给用户。

以下是 QFileSystemModel 类的一些重要函数:

函数 描述
QFileSystemModel(QObject *parent = nullptr) 构造函数,创建一个 QFileSystemModel 对象。
void setRootPath(const QString &path) 设置模型的根路径,指定从哪个目录开始显示文件系统。
QString rootPath() const 获取模型的根路径。
void setFilter(QDir::Filters filters) 设置目录过滤器,用于过滤显示的文件和目录。
void setResolveSymlinks(bool enable) 设置是否解析符号链接。
void sort(int column, Qt::SortOrder order) 对指定列进行排序。
QModelIndex index(const QString &path, int column = 0) const 根据文件路径和列号获取模型索引。
QFileInfo fileInfo(const QModelIndex &index) const 获取给定索引处的文件信息。
bool mkdir(const QModelIndex &index, const QString &name) 在给定索引处的目录中创建新目录。
bool rmdir(const QModelIndex &index) 删除给定索引处的目录。
bool remove(const QModelIndex &index) 删除给定索引处的文件。
void directoryLoaded(const QString &path) 在目录加载完成时发射的信号。
void fileRenamed(const QString &path, const QString &oldName, const QString &newName) 在文件重命名时发射的信号。
QModelIndex setRootPath(const QString &path) 设置根路径,并返回表示新路径的模型索引。
QString filePath(const QModelIndex &index) const 获取给定索引处的文件路径。
void setReadOnly(bool enable) 设置模型为只读模式。
bool isReadOnly() const 判断模型是否为只读模式。
void setNameFilters(const QStringList &filters) 设置名称过滤器,用于限制模型中显示的文件类型。
QStringList nameFilters() const 获取当前的名称过滤器。
void setRootIndex(const QModelIndex &index) 设置根索引。
QModelIndex rootIndex() const 获取当前的根索引。
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const 获取模型索引。
QModelIndex parent(const QModelIndex &index) const 获取给定索引的父索引。
int rowCount(const QModelIndex &parent = QModelIndex()) const 获取给定父索引下的行数。
int columnCount(const QModelIndex &parent = QModelIndex()) const 获取给定父索引下的列数。
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const 获取模型数据。

当需要使用此模型时,我们需要导入QFileSystemModel组件, 并在主类内定义QFileSystemModel类型的模型指针,并在主函数内通过new QFileSystemModel新建类,通过model->setRootPath设置默认停留的指针位置,最后调用model->setNameFilters设置过滤器,此处我们只需要显示*.exe,*.txt,*.mp4三种格式即可,最后使用ui->treeView->setModel将此模型设置到组件内即可,其完整代码非常简单,如下所示;

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
ui->setupUi(this); // 新建类指针
model=new QFileSystemModel(this); // 设置根目录
model->setRootPath(QDir::currentPath()); // 设置过滤器,只过滤出txt,mp4
QStringList filter;
filter << "*.txt" << "*.mp4"; // 使用过滤器
model->setNameFilters(filter);
model->setNameFilterDisables(false); // 设置数据模型
ui->treeView->setModel(model);
}

数据模型内的选中项可通过使用模型内提供的各种方法来实现取值,例如使用model->isDir可获取到是否为目录,通过model->filePath则可用于得到文件的路径等。

// 被点击后触发
void MainWindow::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::asprintf("%.1f MB",sz/1024.0));
}
}

运行后则可以通过点击不同的目录树展开,由于设置了只过滤特定的文件所以此处显示的结果如下所示;

C++ Qt开发:QFileSystemModel文件管理组件的更多相关文章

  1. win使用MSYS2安装Qt开发环境

    原文链接 MSYS2 下载地址: pacman的具体用法 有pacman的具体使用方法.我们首先对系统升级 我们首先对系统升级 pacman -Syu 就会检测整个系统可以升级的组件,并自动下载安装, ...

  2. 基于QT开发的第三方库

    基于Qt开发的第三方库 分类: Qt2014-02-12 11:34 1738人阅读 评论(0) 收藏 举报 QT第三方库   目录(?)[+]   文章来源:http://blog.csdn.net ...

  3. 【应用笔记】【AN005】Qt开发环境下基于RS485的4-20mA电流采集

    简介 4-20mA电流环具有广泛的应用前景,在许多行业中都发挥着重要作用.本文主要介绍在Qt开发环境下基于RS485实现4-20mA电流采集,实现WINDOWS平台对数据的采集.分析及显示. 系统组成 ...

  4. 利用Qt开发跨平台APP

    本文将手把手教你如何在Windows环境下,使用Qt编译出安卓应用程序. Qt是一个优秀的跨平台开发工具.我们利用Qt可以很方便地将一次编写的应用,多次编译到不同平台上,如Windows.Linux. ...

  5. Qt开发环境下载和安装

    Qt是跨平台的图形开发库,目前由Digia全资子公司 Qt Company 独立运营,官方网址: http://www.qt.io/ 也可以访问Qt项目域名:http://qt-project.org ...

  6. Qt开发北斗定位系统融合百度地图API及Qt程序打包发布

    Qt开发北斗定位系统融合百度地图API及Qt程序打包发布 1.上位机介绍 最近有个接了一个小型项目,内容很简单,就是解析北斗GPS的串口数据然后输出经纬度,但接过来觉得太简单,就发挥了主观能动性,增加 ...

  7. CAD控件:QT开发使用控件入门

    1. 环境搭建: 3 1.1. 安装Qt 3 1.2. 安装Microsoft Windows SDK的调试包 6 2. QT中使用MxDraw控件 7 1.3. 引入控件 7 3. 打开DWG文件 ...

  8. QT开发环境的建立以及QTE4.6.3、tslib1.4的移植过程

    1.首先是建立Linux开发环境1.1.在windowsXP下安装博创公司提供的虚拟机软件VMware Workstation,版本为VMware-workstation-full-7.0.1-227 ...

  9. 基于arm的嵌入式QT开发(课程设计)

    一. 项目要求 配置QT5.7基于x86及arm 等两种CPU架构的调试及开发环境: 移植arm编译后的QT5.7及屏幕校准工具tslib1.4至CORTEX ARM9实验平台: 开发基于QT5.7的 ...

  10. 关于 Windows 下 Qt 开发,这个问题必须要搞清楚!

    小伙伴们,大家好,小北师兄又来喂饭啦,从上次写完<一个例子让你秒懂 Qt Creator 编译原理>后,师兄对于 Qt 的一些环境配置有了更深的理解,这对师兄进行 Qt 的后续学习起到了很 ...

随机推荐

  1. 【Java】引用传递?值传递?

    引用传递和值传递,从上学那会儿就开始强调的概念,不管你是计算机相关专业还是自学Java,一定听过这么一句话: 方法调用参数如果是对象,那就是引用传递,如果是基本数据类型,就是值传递. 比如:funct ...

  2. 《Java 面经手册》PDF,417页11.5万字,完稿!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 我膨胀了 ,在看了大部分以面试讲解的 Java 文章后,发现很多内容的讲解都偏向于翻 ...

  3. docker中的mysql时区修改

    永久修改 进入容器 docker exec -it mysql5.7 bash 查看当前时区 date -R 修改时区 cp /usr/share/zoneinfo/PRC /etc/localtim ...

  4. Dart常用核心知识

    Dart简述 Dart 是一个为全平台构建快速应用的客户端优化的编程语言,免费且开源. Dart是面向对象的.类定义的.单继承的语言.它的语法涵盖了多种语言的语法特性,如C,JavaScirpt, J ...

  5. easyexcel只通过表名来动态查询并动态导出数据

    EasyExcel动态表头即动态数据生成 1️⃣ 业务需求 需要将数据库中的所有表放在一个下拉框中,下拉框支持模糊查询到相关的表,然后通过这个表名查询到数据库的数据,切换不同的表查询出来相关表的列和数 ...

  6. 微信小程序 Path2D 不支持 svg 路径的解决办法

    问题 开发一个微信小程序项目的时候需要用到Path2D这个对象,但是发现小程序的Path2D对象不支持实例化的时候直接传入'svg path',导致下面的代码运行的时候报错(浏览器中可运行) #其它代 ...

  7. Exadata存储节点的CPU限制成功了没?

    上篇随笔谈到刷1/8 rack时,日志显示存储节点已经成功限制CPU的,可如果使用mpstat命令看貌似还是64 CPU,难道实际没有成功吗? [root@dbm08celadm03 ~]# mpst ...

  8. HTTP 400 Bad Request 错误。

  9. Kubernetes 漫游:Controller Manager

    Controller Manager Controller Manager 是控制平面的一个重要组件,负责维护 Kubernetes 集群的整体状态. 流程: 在集群中 Controller Mana ...

  10. Power BI 14 DAY

    快消行业销售情况分析 分析目的 帮助经销商优化进.销.存各环节业务流程行为,实现进销存一体化管理,加快资金运转速度,实现销售利润最大化的目的 重要指标 销售类指标 动销次数:在一段期间内产品的销售次数 ...