C++ Qt开发:QFileSystemModel文件管理组件
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文件管理组件的更多相关文章
- win使用MSYS2安装Qt开发环境
原文链接 MSYS2 下载地址: pacman的具体用法 有pacman的具体使用方法.我们首先对系统升级 我们首先对系统升级 pacman -Syu 就会检测整个系统可以升级的组件,并自动下载安装, ...
- 基于QT开发的第三方库
基于Qt开发的第三方库 分类: Qt2014-02-12 11:34 1738人阅读 评论(0) 收藏 举报 QT第三方库 目录(?)[+] 文章来源:http://blog.csdn.net ...
- 【应用笔记】【AN005】Qt开发环境下基于RS485的4-20mA电流采集
简介 4-20mA电流环具有广泛的应用前景,在许多行业中都发挥着重要作用.本文主要介绍在Qt开发环境下基于RS485实现4-20mA电流采集,实现WINDOWS平台对数据的采集.分析及显示. 系统组成 ...
- 利用Qt开发跨平台APP
本文将手把手教你如何在Windows环境下,使用Qt编译出安卓应用程序. Qt是一个优秀的跨平台开发工具.我们利用Qt可以很方便地将一次编写的应用,多次编译到不同平台上,如Windows.Linux. ...
- Qt开发环境下载和安装
Qt是跨平台的图形开发库,目前由Digia全资子公司 Qt Company 独立运营,官方网址: http://www.qt.io/ 也可以访问Qt项目域名:http://qt-project.org ...
- Qt开发北斗定位系统融合百度地图API及Qt程序打包发布
Qt开发北斗定位系统融合百度地图API及Qt程序打包发布 1.上位机介绍 最近有个接了一个小型项目,内容很简单,就是解析北斗GPS的串口数据然后输出经纬度,但接过来觉得太简单,就发挥了主观能动性,增加 ...
- CAD控件:QT开发使用控件入门
1. 环境搭建: 3 1.1. 安装Qt 3 1.2. 安装Microsoft Windows SDK的调试包 6 2. QT中使用MxDraw控件 7 1.3. 引入控件 7 3. 打开DWG文件 ...
- QT开发环境的建立以及QTE4.6.3、tslib1.4的移植过程
1.首先是建立Linux开发环境1.1.在windowsXP下安装博创公司提供的虚拟机软件VMware Workstation,版本为VMware-workstation-full-7.0.1-227 ...
- 基于arm的嵌入式QT开发(课程设计)
一. 项目要求 配置QT5.7基于x86及arm 等两种CPU架构的调试及开发环境: 移植arm编译后的QT5.7及屏幕校准工具tslib1.4至CORTEX ARM9实验平台: 开发基于QT5.7的 ...
- 关于 Windows 下 Qt 开发,这个问题必须要搞清楚!
小伙伴们,大家好,小北师兄又来喂饭啦,从上次写完<一个例子让你秒懂 Qt Creator 编译原理>后,师兄对于 Qt 的一些环境配置有了更深的理解,这对师兄进行 Qt 的后续学习起到了很 ...
随机推荐
- Fabric网络升级(一)
原文来自这里. 本章节主要介绍如何从之前的版本或其他长期支持版本升级至最新版. 从2.1升级到2.2 Fabric v2.1和v2.2都是稳定版,以bug修复和其它形式的代码加固位置.因此,升级不需要 ...
- clion运行单个c和c++文件(.c.cpp)
运行方法 在clion中安装插件:C/C++Single File Execution 在要执行的cpp文件中添加main函数 在cpp文件的编辑器界面中点右键会出现[Add executable f ...
- 2.6 Windows驱动开发:使用IO与DPC定时器
本章将继续探索驱动开发中的基础部分,定时器在内核中同样很常用,在内核中定时器可以使用两种,即IO定时器,以及DPC定时器,一般来说IO定时器是DDK中提供的一种,该定时器可以为间隔为N秒做定时,但如果 ...
- git操作 手写稿
- Linux 将命令的输出保存到文件
当你在 Linux 终端中运行命令或脚本时,它会在终端中打印输出方便你立即查看.方法 1:使用重定向将命令输出保存到文件中你可以在 Linux 中使用重定向来达成目的.使用重定向操作符,它会将输出保存 ...
- vuecli 自动转换小文件为 base64 格式,如何关闭?
1. 问题 最近在写 vue 项目时,发现稍微小一点的静态资源,例如字体文件, 图片都被自动转换为 base64 格式了. 在网上搜索时基本都是去配置 url-loader ,配置后提示:Can't ...
- NC16541 [NOIP2013]车站分级
题目链接 题目 题目描述 一条单向的铁路线上,依次有编号为1, 2, -, n 的n 个火车站.每个火车站都有一个级别,最低为1 级.现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次 ...
- CSS浮动&定位&布局
浮动简介 浮动最早起设计出来是为了实现文字环绕图片或者文字环绕的效果,现在浮动是主流的页面布局方式之一 float:浮动属性,值可以是left.right对应向左和向右浮动 元素浮动之后的特点 脱离文 ...
- Python中Try/Except/else/final语句
python中的try/except/else/finally语句 与其他语言相同,在python中,try/except语句主要是用于处理程序正常执行过程中出现的一些异常情况,如语法错误(pyt ...
- 前端学习 node 快速入门 系列 —— 项目版权格式化
其他章节请看: 前端学习 node 快速入门 系列 项目版权格式化 需求 替换整个项目的版权信息,替换文件为 .c 和 .h 结尾. 分析 版权信息通常都在文件开头,通过是否有 copyright 来 ...