【QT】 QTreeView/QTreeWidget插入文件目录列表

目录

1 QTreeView插入文件目录列表

1.1 自定义默认展开指定路径及文件

1.2 展开指定路径的所有目录及文件

  2 QTreeWidget插入文件目录列表

QTreeView插入文件目录列表

  显示指定磁盘下的目录,简单的方式就是利用QTreeView+QDirModel就可以显示了。

1.1 自定义默认展开指定路径及文件

 
   //获取程序所在路径
    QString applicationDirPath = QCoreApplication::applicationDirPath();
    qDebug() << "applicationDirPath=" << applicationDirPath;
    QString dirPath = applicationDirPath + "/slMap/安徽省";
    QDirModel *dirMode = new QDirModel;
    ui->treeView->setModel(dirMode);
    ui->treeView->setRootIndex(dirMode->index(dirPath));
    ui->treeView->allColumnsShowFocus();
    
    //需要默认展开的文件位置
    QString filepath=dirPath+ "/合肥市/滨湖区/滨湖考场/综合类考场";
    QStringList list = filepath.split("/");
    //每次循环需要打开的文件路径
    QString findpath;
    
    //这里不能直接使用ui->treeView->setExpanded(model->index(目标文件路径),1);
    //这样只能打开第一层文件夹,因此需要使用循环一层一层的打开。
    
    //循环一层一层的打开文件夹直到目标文件夹被打开
    foreach(QString addstr,list)
    {
        if(findpath.size()>0)
        {
            addstr='/'+addstr;
        }
        findpath+=addstr;
        ui->treeView->setExpanded(dirMode->index(findpath),1);
    }
这里默认展开“D:\...\slMap\安徽省\合肥市\滨湖区\滨湖考场\综合类考场”路径。
注意:不能直接使用 ui->treeView->setExpanded(model->index(目标文件路径),1), 这样只能打开第一层文件夹,setExpanded()只能打开当前文件下的文件夹要使得指定路径被打开,只能一层一层的打开文件,直到目标文件夹被打开。

1.2 展开指定路径的所有目录及文件

//获取程序所在路径
    QString applicationDirPath = QCoreApplication::applicationDirPath();
    qDebug() << "applicationDirPath=" << applicationDirPath;
    QString dirPath = applicationDirPath + "/slMap/安徽省";
    QDirModel *dirMode = new QDirModel;
    ui->treeView->setModel(dirMode);
    ui->treeView->setRootIndex(dirMode->index(dirPath));
    ui->treeView->allColumnsShowFocus();
    // 设置是否展开所有目录,当目录过多时候 设置展开容易卡住
    ui->treeView->expandAll();
这里展开“D:\...\slMap\安徽省“路径。

  2 QTreeWidget插入文件目录列表

    先遍历指定路径下的目录文件夹名称,再插入 QTreeWidget控件。
void MainWindow::initTreeWidget()
{
    //获取程序所在路径
    QString applicationDirPath = QCoreApplication::applicationDirPath();
    qDebug() << "applicationDirPath=" << applicationDirPath;
    dirPath = applicationDirPath + "/slMap/安徽省";
    QStringList dirNames = getDirNames(dirPath);

    ui->treeWidget->setColumnCount(2);
    ui->treeWidget->setHeaderLabels(QStringList()<<"名称"<<"描述");

    for(int i=0;i<dirNames.size();i++)
    {
        QTreeWidgetItem * item = AddTreeRoot(dirNames.at(i),"市区");
        QString subdirPath = dirPath + "/" +dirNames.at(i);
            getSubDir(item,subdirPath);
    }

    ui->treeWidget->expandAll();
}
QStringList MainWindow::getDirNames(QString dirPath)
{
    QDir dir(dirPath);
    //--1 判断文件夹是否存在
    if(!dir.exists())
    {
        CustomMessagebox msgBox(MessageType::MT_Error, "文件夹找不到", this);
    }
    else{
        //--2 获取当前路径下所有的文件夹名字
        QStringList names = dir.entryList(QDir::Dirs);

        //--3 删除当前文件夹和上级文件夹(温馨提示:隐藏的文件夹获取不了)
        names.removeOne(".");
        names.removeOne("..");

        //--4 打印出获取的文件名
        qDebug() << "names: " << names;
        return names;
    }
}
void MainWindow::getSubDir(QTreeWidgetItem *item,QString subDirPath)
{
    // 创建 QDirIterator 对象并指定根目录路径、过滤器等参数
    QDirIterator it(subDirPath, QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::NoIteratorFlags);
    while (it.hasNext()) {
        // 获取当前文件或目录的路径
        QString fileOrDirectoryPath = it.next();
        qDebug() << "File or directory path:" << fileOrDirectoryPath;
        QTreeWidgetItem * subitem = AddTreeNode(item,it.fileName(),"区/县");
    }
}
QTreeWidgetItem * MainWindow::AddTreeRoot(QString name,QString desc)
{
    QTreeWidgetItem * item=new QTreeWidgetItem(QStringList()<<name<<desc);
    ui->treeWidget->addTopLevelItem(item);
    return item;
}

QTreeWidgetItem * MainWindow::AddTreeNode(QTreeWidgetItem *parent,QString name,QString desc)
{
    QTreeWidgetItem * item=new QTreeWidgetItem(QStringList()<<name<<desc);
    parent->addChild(item);
    return item;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

05_Mongooes

Mongooes Mongoose是通过Node来操作MongoDB的一个模块。是基于Node.js的第三方模块。 一、Node.js安装 1.解压 2.创建文件夹 解压路径下&#xff0c;创建两个文件夹 node_global&#xff1a;全局安装位置 node_cache&#xff1a;缓存 3.配置 配置环境变量 在path路径…

Open3D(C++) 指定点数的体素滤波

目录 一、算法原理1、算法过程2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、算法过程 对于数据量较大的点云,在后期进行配准时会影响计算效率。而体素格网…

03. Nginx入门-Nginx虚拟主机

Nginx虚拟主机简介 yum安装与源码安装一样&#xff0c;只是Nginx配置文件路径不一致&#xff0c;这里用的yum安装的配置文件路径。 利用虚拟主机的功能&#xff0c;可以在一台Nginx服务器上部署一个或多个虚拟主机。 虚拟主机主配置文件 注意&#xff1a;配置完成Nginx主配置…

【如何在Docker中,修改已经挂载的卷(Volume)】

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 提示&#xff1a;添加投票&#xff01;&#xff01;&#xff01; 目录 简述概要知识图谱 简述概要 如何在Docker中&#xff0c;修改已经挂载的卷&#xff08;Volume&#xff09; 知识图谱 在Docker中&#xff0c;修改已经挂载…

基于SSM SpringBoot vue个人博客网站

基于SSM SpringBoot vue个人博客网站 系统功能 首页 图片轮播 博客文章 搜索 登录注册 论坛 留言板 个人中心 我的收藏 后台管理 登录 个人中心 博客分类管理 博客文章管理 论坛管理 系统管理 管理员管理 注册用户管理 开发环境和技术 开发语言&#xff1a;Java 使用框架:…

API 测试- Postman Vs Rest Assured

【软件测试面试突击班】2024吃透软件测试面试最全八股文攻略教程&#xff0c;一周学完让你面试通过率提高90%&#xff01;&#xff08;自动化测试&#xff09; 介绍&#xff1a; 创新和现代化的目标已经从简单的市场差异化转变为更有道德地追求整个社会的进步。提出了新的要求…

03按键控制LED

上回讲到点亮一个LED     这次我们来实现用按键控制led 不带中断的方式 当然实例来源网络 加上自己整合 先熟悉流程 0.添加一个自己写的驱动库文件 为什么添加 笔者想的是一个项目工程希望能适应很多个应用场景需要什么直接在里面调用分装好的函数就行 1.如何添加文件以及…

AI改变游戏规则:内容创作的新时代!

AI技术&#xff0c;尤其是人工智能&#xff08;AI&#xff09;在内容创作领域的应用&#xff0c;正开启了一个全新的时代。这一时代的核心在于利用AI的能力&#xff0c;不仅提高内容创作的效率&#xff0c;还能引入前所未有的创新元素&#xff0c;从而彻底改变游戏规则。 AI在…

【北京迅为】《iTOP-3588开发板网络环境配置手册》第1章 网络基础知识学习

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

Stable Diffusion 模型分享:CG texture light and shadow(CG纹理光影)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 一个拥有cg质感和光影的融合模型&#xff0c;偏2.5D 条目内容类型大模型基础模型SD 1.5来…

python--产品篇--游戏-坦克

文章目录 准备代码main.pycfg.py 效果 准备 下载 代码 main.py import os import cfg import pygame from modules import *主函数 def main(cfg):# 游戏初始化pygame.init()pygame.mixer.init()screen pygame.display.set_mode((cfg.WIDTH, cfg.HEIGHT))pygame.display.…

2024-03-05

作业要求&#xff1a; 使用write 和 read 实现 文件夹拷贝功能&#xff0c;不考虑递归拷贝使用循环fork的形式。创建一条进程链&#xff0c;链条上总共有100个进程 要求&#xff1a;程序不崩溃 作业1&#xff1a;使用write 和 read 实现 文件夹拷贝功能&#xff0c;不考虑递归拷…

从零学习Linux操作系统 第三十一部分 ansible常用模块介绍

一、ansible运行模块的两种方式 Ad-Hoc方式 ##利用ansible命令直接完成管理&#xff0c;主要用于临时命令使用场景 playbook方式 ##ansible脚本&#xff0c;主要用于大型项目场景&#xff0c;需要前期的规划&#xff0c;相当于shell当中的脚本 二、如何查看模块帮助 ansible…

Java方法重载

重载 概念 重载就是在一个类中&#xff0c;有相同的函数名&#xff0c;但形参不同的函数 规则 方法名称必须相同参数列表必须不同&#xff08;个数不同、或类型不同、参数排列顺序不同等&#xff09;方法的返回值类型可以相同也可以不同仅仅返回类型不同不足以成为方法的重载 实…

【论文精读】Mask R-CNN

摘要 基于Faster RCNN&#xff0c;做出如下改变&#xff1a; 添加了用于预测每个感兴趣区域(RoI)上的分割掩码分支&#xff0c;与用于分类和边界框回归的分支并行。mask分支是一个应用于每个RoI的FCN&#xff0c;以像素到像素的方式预测分割掩码&#xff0c;只增加了很小的计…

微信小程序云开发教程——墨刀原型工具入门(Axure导入)

引言 作为一个小白&#xff0c;小北要怎么在短时间内快速学会微信小程序原型设计&#xff1f; “时间紧&#xff0c;任务重”&#xff0c;这意味着学习时必须把握微信小程序原型设计中的重点、难点&#xff0c;而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

计算机网络实验一 网线制作

实验目的与要求&#xff1a; 实验目的 了解以太网网线&#xff08;双绞线&#xff09;和制作方法 实验内容 了解网线和水晶头 学习网线制作方法 实验环境和要求 网线 水晶头 压线钳 剥线钳 网线测试器 方法、步骤&#xff1a; 步骤一 准备工具和材料 步骤二 剥掉双绞线的外…

【排序】详解归并排序

一、思想 归并排序的核心思想是分治法&#xff0c;即将大问题分解成小问题来解决&#xff0c;然后再将解决后的小问题的结果合并以解决原来的大问题。具体包括以下几个步骤&#xff1a; 分解&#xff08;Divide&#xff09;&#xff1a;将原始数组不断地二分成更小的子数组&a…

使用Redis入门Golang

Golang&#xff0c;也被称为Go&#xff0c;近年来由于其简单性、效率和并发支持而获得了显著的关注。另一方面&#xff0c;Redis是一个强大的内存数据存储&#xff0c;擅长于缓存、会话存储和实时分析。将这两种技术结合起来&#xff0c;可以为各种用例提供可扩展和高效的解决方…

通过Apple Configurator 2导出iOS ipa包

通过Apple Configurator 2导出iOS ipa包 安装Apple Configurator 2 从Mac AppStore安装Apple Configurator 2 下载ipa 准备工作&#xff1a; 1、 电脑已经安装了Apple Configurator 2 2、 手机已经安装了目标软件 3、 Apple 账号已经下载过目标软件 打开后连接设备&#xf…