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

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

以下是 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. C# 输入指定日期获取当前年的第一天 、当前年的最后天、某月的第一天 、某月的最后一天

    方法 /// <summary> /// 取得当前年的第一天 /// </summary> /// <param name="datetime"> ...

  2. 深度学习应用篇-计算机视觉-语义分割综述[5]:FCN、SegNet、Deeplab等分割算法、常用二维三维半立体数据集汇总、前景展望等

    深度学习应用篇-计算机视觉-语义分割综述[5]:FCN.SegNet.Deeplab等分割算法.常用二维三维半立体数据集汇总.前景展望等 语义分割综述(semantic segmentation) 1 ...

  3. git 上传错误This oplation equires one of the flowi vrsionsot the NET Framework:.NETFramework

    相关文章链接: 码云(gitee)配置SSH密钥 码云gitee创建仓库并用git上传文件 git 上传错误This oplation equires one of the flowi vrsions ...

  4. 7.5 Windows驱动开发:监控Register注册表回调

    在笔者前一篇文章<内核枚举Registry注册表回调>中实现了对注册表的枚举,本章将实现对注册表的监控,不同于32位系统在64位系统中,微软为我们提供了两个针对注册表的专用内核监控函数,通 ...

  5. 19.0 Boost 基于ASIO网络编程技术

    Boost ASIO库是一个基于C++语言的开源网络编程库,该库提供了成熟.高效.跨平台的网络API接口,并同时支持同步与异步两种模式,ASIO库提供了多重I/O对象.异步定时器.可执行队列.信号操作 ...

  6. 4.8 C++ Boost 应用JSON解析库

    property_tree 是 Boost 库中的一个头文件库,用于处理和解析基于 XML.Json 或者 INFO 格式的数据. property_tree 可以提供一个轻量级的.灵活的.基于二叉数 ...

  7. 3.1 C++ STL 双向队列容器

    双向队列容器(Deque)是C++ STL中的一种数据结构,是一种双端队列,允许在容器的两端进行快速插入和删除操作,可以看作是一种动态数组的扩展,支持随机访问,同时提供了高效的在队列头尾插入和删除元素 ...

  8. Python Requests 实现简单网络请求

    Python 是一种跨平台的计算机程序设计语言,面向对象动态类型语言,Python是纯粹的自由软件,源代码和解释器CPython遵循 GPL(GNU General Public License)协议 ...

  9. C#使用Tamir.SharpSsh.jsch上传文件异常Algorithm negotiation fail

    环境 服务器:centos6.5 客户端:Windows 前言 项目中有一个exe,安装在客户端,其中有一个功能是将本地产生的文件上传至服务器,这个功能是以服务的方式安装在客户端上.之前一切好使,文件 ...

  10. Data Encryption Standard算法:历经考验的经典加密方案

    在当今数字化时代,数据安全是一个至关重要的问题.为了保护敏感数据的机密性和完整性,加密算法成为了数据保护的关键技术.其中,DES(Data Encryption Standard)算法作为一种经典的对 ...