C++ Qt开发:QFileSystemModel文件管理组件

news2024/12/23 12:51:36

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));
    }
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1500079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HelpLook 和 confluence:创建知识库我选HelpLook

企业要想快速创建知识库&#xff0c;最好的方法就是利用好工具。而市面上创建知识库的平台多而繁杂&#xff0c;无法在最快时间内判断哪一个是最适合企业解决问题的。HelpLook和confluence功能相似&#xff0c;多数人无法判断并做出最佳选择&#xff0c;今天就跟着LookLook同学…

1688商品详情数据丨工厂详情数据丨店铺详情数据

1688商品详情数据、工厂详情数据以及店铺详情数据是商家在阿里巴巴1688平台上进行运营和决策的重要参考。这些数据涵盖了商品的详细信息、工厂的生产能力和信誉情况&#xff0c;以及店铺的经营状况和口碑评价&#xff0c;为商家提供了全方位的市场洞察和竞争优势。 请求示例&a…

Flutter学习9 - http 中 get/post 请求示例

1、配置 http pubspec.yaml dependencies:http: ^0.13.4flutter:sdk: flutterhttp 库最新插件版本查看&#xff1a;https://pub.dev/packages/http不一定要用最新版本 http&#xff0c;要使用项目所能支持的版本 .dart import package:http/http.dart as http;2、示例 &a…

基于UDP实现直播间聊天的功能

需求&#xff1a;软件划分为用户客户端和主播服务端两个软件client.c和server.c 用户客户端负责&#xff1a;1.接收用户的昵称2.接收用户输入的信息&#xff0c;能够将信息发送给服务端3.接收服务端回复的数据信息,并完成显示主播服务端负责&#xff1a;1.对所有加入直播间的用…

基于uniapp cli项目开发的老项目,运行报错path.replace is not a function

项目&#xff1a;基于uniapp cli的微信小程序老项目 问题&#xff1a;git拉取代码&#xff0c;npm安装包时就报错&#xff1b; cnpm能安装成功包&#xff0c;运行报错 三种方法尝试解决&#xff1a; 更改代码&#xff0c;typeof pathstring的话&#xff0c;才走path.replace…

mysql的语法总结2

命令&#xff1a; mysql -u 用户名 -p mysql登录 命令&#xff1a;create database u1 创建数据库u1 查询数据库 使用数据库u1 创建表department 查询表department ALTER TABLE 表名 操作类型&#xff1b; 操作类型可以有以下的操作&#xff1a; 添加列&#x…

【算法 高级数据结构】树状数组:一种高效的数据结构(一)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;算法题、 基础算法~赶紧来学算法吧 &#x1f4a1;往期推荐&#xff1a; 【算法基础 & 数学】快速幂求逆元&#xff08;逆元、扩展欧几里得定理、小费马定理&#x…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现双快门采集两张曝光时间非常短的图像(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现双快门采集两张曝光时间非常短的图像&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机定序器功能的技术背景Baumer工业相机通过NEOAPI SDK使用定序器功能预期的相机动作技术限制定序器的工作原理 Baumer工业相机通过…

20个Python函数程序实例

前面介绍的函数太简单了&#xff1a; 以下是 20 个不同的 Python 函数实例 下面深入一点点&#xff1a; 以下是20个稍微深入一点的&#xff0c;使用Python语言定义并调用函数的示例程序&#xff1a; 20个函数实例 简单函数调用 def greet():print("Hello!")greet…

WPF Border控件 基本使用

Border 基本使用 1单线效果 代码&#xff1a; <Border Grid.Row"0" BorderThickness"0,0,0,1" BorderBrush"Red" /> 说明&#xff1a; BorderThickness"0,0,0,1" 可以分别设置四条边&#xff0c;顺序是&#xff1a;左 上 右…

【微信小程序】基本语法

目录 一、列表渲染&#xff08;包括wx:for改变默认&#xff09; 二、事件冒泡和事件捕获 三、生命周期 一、列表渲染&#xff08;包括wx:for改变默认&#xff09; 1、列表渲染(wx-for、block 改变默认wx:for item等) <view> {{msg}} </view> //渲染跟普通vu…

云计算项目十:ES集群安装|部署kibana

ES集群安装 部署ES集群&#xff0c;用于ELK日志分析平台的构建 es-0001 主机更改 /etc/hosts [rootes-0001 ~]# vim /etc/hosts 192.168.1.71 es-0001 192.168.1.72 es-0002 192.168.1.73 es-0003 192.168.1.74 kibana 192.168.1.75 logstash # 将最新的/etc/hosts配置文件更…

Python绘图-12地理数据可视化

Matplotlib 自 带 4 类别 地理投影&#xff1a; Aitoff, Hammer, Mollweide 及 Lambert 投影&#xff0c;可以 结 合以下四 张 不同 的 图 了解四 种 不同投影 区别 。 12.1Aitoff投影 12.1.1图像呈现 12.1.2绘图代码 import numpy as np # 导入numpy库&#xff0c;用于…

2024年大语言模型的微调

一个LLM的生命周期包含多个步骤&#xff0c;下面将讨论这个周期中最活跃、最密集的部分之一 -- fine-tuning(微调)过程。 LLM的生命周期 下面展示了LLM的生命周期&#xff1a; 愿景和范围&#xff1a;首先需要定义项目的愿景&#xff0c;你想让你的LLM作为一个更加通用的工具…

双体系Java学习之关键字,标识符以及命名规范

刚开学&#xff0c;然后之前的课程暂时停在了多态&#xff0c;接下来开始跟着学校的步伐重新开始学一下&#xff0c;谢谢&#xff01;&#xff01;&#xff01; 之前的课程也会找个时间补起来的&#xff0c;谢谢大家&#xff01; 关键字 标识符 命名规范

STM 32 HAL库 内部FLash读写调试的问题

问题1&#xff1a;STM32G0 系列 256KB内部FLash大小&#xff0c;无法读写 分析&#xff1a;从STM32F103C8 移植过来的Flash操作代码&#xff0c;发现无法进行读写&#xff0c;返回 HAL_ERROR 错误&#xff0c;随后&#xff0c;检查在写之前是否擦除成功&#xff0c;检查代码发…

Oracle VM VirtualBox 安装完Ubuntu系统后一直提示安装Ubuntu

是因为存储设置有问题&#xff0c;把Ubuntu镜像添加进去了,移除后重启虚拟机就不会提示了 以下是配置的移除后的界面。

羊大师揭秘,女性喝羊奶有什么好处

羊大师揭秘&#xff0c;女性喝羊奶有什么好处 女性喝羊奶有多种好处。首先&#xff0c;羊奶富含钙元素&#xff0c;有助于预防女性体内缺钙和老年女性骨质疏松&#xff0c;从而增强骨骼密度。其次&#xff0c;羊奶中的色氨酸和烟酸等成分有助于促进睡眠&#xff0c;改善睡眠质…

NLP_文本张量表示方法_2(代码示例)

目标 了解什么是文本张量表示及其作用.文本张量表示的几种方法及其实现. 1 文本张量表示 将一段文本使用张量进行表示&#xff0c;其中一般将词汇为表示成向量&#xff0c;称作词向量&#xff0c;再由各个词向量按顺序组成矩阵形成文本表示. ["人生", "该&q…

探索安全与灵活性的边界,波卡账户抽象与多签管理的创新之路

相信大家在刚刚进入 web3 的时候都或多或少面临着一个普遍而棘手的问题&#xff0c;私钥的安全管理。私钥一旦丢失或被盗&#xff0c;用户将永久失去对他们加密资产的访问权。此外&#xff0c;随着区块链应用场景的多样化&#xff0c;这种单一模式已经无法满足复杂的交易结构和…