QT固定文件名格式串转化为TreeView在界面上展示文件树形目录

2023-11-12

获得的文件串格式:
file1/1 - sss.txt|file1/bin.zip|file2/linpanhu.docx|qmake_vc.bat|send.zip|
思路:====>>>
file1/1 - sss.txt
file1/bin.zip
file2/linpanhu.docx
qmake_vc.bat
send.zip

====>>>
file1 1 - sss.txt
file1 bin.zip
file2 linpanhu.docx
qmake_vc.bat
send.zip

====>>>
使用数据标识位置,挂在指定的ITem

//目录树的QStandardItem标识数组,初始化置0,表示空
    for (int i = 0; i < 20; i++)
    {
        use[i] = 0;
    }

/*字符串分割
* @param [in] 原字符串,如“aaa|bbb|ccc|xxx|”
* @param [out] 返回分割后的字符串列表
* @param [in] 分割的字符,如“|”
* @return  返回分割后的字符串列表
*/
QList<QString> MainWindow::SplitString(const std::string& s, QList<QString> fileList, const std::string& c)
{
    std::string::size_type pos1, pos2;
    pos2 = s.find(c);
    pos1 = 0;
    while (std::string::npos != pos2)
    {
        fileList.append(QString::fromLocal8Bit(s.substr(pos1, pos2 - pos1).c_str()));   //国际化,解决中文乱码
        pos1 = pos2 + c.size();
        pos2 = s.find(c, pos1);
    }
    if (pos1 != s.length())
        fileList.append(QString::fromLocal8Bit(s.substr(pos1).c_str()));    //添加最后一段

    return fileList;
}

//加载树型目录
void MainWindow::loadTreeDir(QList<QString> fileList)
{
    //加载树形目录
    QStandardItemModel* model = new QStandardItemModel(ui->fileTreeView);
    //model->setHorizontalHeaderLabels(tr("文件树:")); //表头
    ui->fileTreeView->setModel(model);

    QList<QList<QString>> fileDirList;          //文件目录列表
    QSet<QString> fileDirSet = QSet<QString>(); //目录集合

    QVector<QString> fileDirSet2;
    //fileDirSet2.append("DTS_FILES");

    for (int j = 0; j < fileList.size(); j++)
    {
        QList<QString> tempList;                                    //
        tempList = SplitString(fileList.at(j).toLocal8Bit().toStdString(), tempList, "/");      //按照“/”分割
        fileDirList.append(tempList);           //存入目录列表
        tempList.clear();//关键,不clear会有残留数据
    }
    //sortDir(fileDirList);                     //目录按级数排序
    QStandardItem* itemp[20];
    itemp[0] = new QStandardItem(tr("DTS_FILES"));          //创建根目录
    itemp[0]->setIcon(QIcon(tr(":/images/dir_s.png"))); //设置icon
    model->setItem(0, 0, itemp[0]);                     //通过模型对象添加条目
    for (int k = 0; k < fileDirList.size(); k++)
    {
        QList<QString> temp = fileDirList.at(k);
        for (int l = 0; l < temp.size(); l++)
        {
            if (!fileDirSet2.contains(temp.at(l)))
            {
                fileDirSet2.append(temp.at(l));
            }
        }
    }
    int local = 0;
    //std::string ddd= "";
    for (int ck = 0; ck < fileDirList.size(); ck++)
    {
        for (int m = 0; m < fileDirList.at(ck).size(); m++)
        {
            //ddd = fileDirList.at(ck).at(m).toStdString();
            local = fileDirSet2.indexOf(fileDirList.at(ck).at(m)) + 1; ///值的位置,0的位置默认给DTS_FILES
            if (use[local] != 1)//表示没有此节点
            {
                itemp[local] = new QStandardItem(fileDirList.at(ck).at(m));
                if (fileDirList.at(ck).at(m).contains(".")){    //是文件
                    itemp[local]->setIcon(QIcon(tr(":/images/file_s.png")));    //设置icon
                }
                else
                {
                    //是目录
                    itemp[local]->setIcon(QIcon(tr(":/images/dir_s.png"))); //设置icon
                }
                //首位,一级目录挂载在DTS_FILES下
                if (m == 0)
                {
                    use[local] = 1; //已经添加设为1
                    itemp[0]->appendRow(itemp[local]);
                }
                else
                {
                    //找前面一个挂上
                    int frontLocal = fileDirSet2.indexOf(fileDirList.at(ck).at(m - 1)) + 1;
                    itemp[frontLocal]->appendRow(itemp[local]);
                    use[local] = 1; //已经添加了则设为1
                }
            }
        }
    }
    showInfo(0, QString::fromLocal8Bit("加载目录树成功"));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT固定文件名格式串转化为TreeView在界面上展示文件树形目录 的相关文章

  • [本机]:在Qt for Android中使用Java函数和第3方库[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 最近我用qt写了一个android应用程序 但我有一个很大的问题 我可以使用 调用一些原生的android API 比如调用特殊的activit
  • 调整 QML 图像显示尺寸

    我有一个带有嵌套的 QML 窗口RowLayout 在内排我有两个图像 来源 png这些图像的文件 故意 相当大 当我尝试设置height这些图像上的属性使它们变小 但它们仍然被画得很大 Desired Appearance Actual
  • 安装多个版本的 Qt 库

    我在windows中安装了QtSDK 它的Qt库版本是4 7 0 现在我想为 mingw 和 VS2008 安装 Qt 库版本 4 8 2 我怎样才能做到这一点 如何向QtCreator引入多个版本 注意 我已经从以下位置下载了库http
  • 如何获取 QIcon 的文件/资源​​路径

    假设我做了这样的事情 QIcon myIcon resources icon ico 我稍后如何确定该图标的路径 例如 QString path myIcon getPath 问题是 没有getPath 会员 我找不到类似的东西 但肯定有办
  • qt项目如何设置安装路径

    我正在寻找与 qmake configure prefix 等效的内容 基本上 我想覆盖默认的安装 部署目录 这是如何用命令行 qmake 指定的 我还使用 QtCreator 构建了很多 gui 项目 并且我想知道如何在 QtCreato
  • QT 中只获取文件而不获取目录?

    当我这样做时 QDir myDir home some location QStringList filesList myDir entryList 它返回该位置内的文件和目录 但我只想要文件 并且这些文件可以具有任意扩展名 有任何想法吗
  • Qt 支持在 QIcon 中为 SVG 着色

    看来 Qt 不支持 SVG 中路径标签上的描边 填充选项
  • 当 QML 对象不可见时防止 QML 属性绑定?

    我正在开发一个具有大量属性绑定的 QML 应用程序 数百个对象被跟踪并以不同的形式显示 例如 Qt3D QCanvas 当我在应用程序的单独页面上时 x y 位置和相对大小的属性绑定仍在发生 我怎样才能阻止他们 我知道我可以根据属性是否可视
  • 有没有办法在没有 QApplication::exec() 的情况下使用 Qt?

    有没有一种安全的方法可以在不调用 QApplication exec 的情况下使用 Qt 我有许多不同的对象正在对多个资源执行长期进程 至少其中一个正在与 Web 应用程序服务器进行通信 我正在制作一个 GUI 应用程序 提示用户在正确的时
  • 程序意外完成 - QT Creator

    我正在尝试使用 QT Creator 使用 QT 框架开发 GUI 控制台应用程序 我使用的是Windows XP 我安装了QT 4 8 3和mingw 两者均已安装 没有任何错误 然后我安装了QT Creator QT 版本 路径中的 Q
  • 如何在按下托盘图标菜单操作时执行功能?

    int main int argc char argv QApplication oApp argc argv QAction action1 QMenu menu QSystemTrayIcon TrayIcon QIcon favico
  • (如何)我可以抑制未找到包配置文件的警告吗?

    我正在尝试创建一个CMakeLists txt尝试查找的文件Qt5 如果失败 则尝试回退到Qt4安装 该脚本到目前为止有效 但如果出现以下情况我总会收到警告Qt5未安装 注意FindQt5 cmake是由提供Qt5并且仅当以下情况时才可用Q
  • QTcpSocket 有时不发送数据

    我有两个 QT 应用程序 一个应用程序可以被认为保存了大数据 它每秒向第二个应用程序发送大约 10 KB 的数据块 之前我尝试使用QUdpSocket来传输数据 但由于MTU限制在2 5K左右 并且需要自己分割和重新组合数据 所以我改用QT
  • 错误 LNK2001:无法解析的外部符号 __CxxFrameHandler3

    我正在将 Qt 从 VS 2013 迁移到 Qt 5 10 1 到 VS 2015 出现以下多个链接错误 error LNK2001 unresolved external symbol CxxFrameHandler3 error LNK
  • 如何将图像显示为缩略图

    我有一个QTreeView显示硬盘驱动器和目录 我也有一个QListView显示图像文件如下 但我想将图像显示为缩略图 如下所示 My code mainWidget mainWidget QWidget parent QWidget pa
  • 退出 Qt 程序的正确方法?

    我应该如何退出 Qt 程序 例如在加载数据文件时 发现文件损坏 并且用户需要退出该应用程序或重新启动数据文件 我是不是该 call exit EXIT FAILURE call QApplication quit call QCoreApp
  • Qt 布局,在小部件大小更改后调整到最小大小

    基本上我有一个QGridLayout里面有一些小部件 最重要的是 2 个标签 我用它们将图像绘制到屏幕上 好吧 如果用户愿意 他可以更改传入图像的分辨率 从而强制标签调整大小 我们假设标签的初始大小是320x240 用户将 VideoMod
  • 如何使QTableView类的restoreState()和saveState()正常工作?

    首先 我想说 我的问题已经在这里讨论过 并且这里是 https stackoverflow com questions 1163030 qt qtableview and horizontalheader restorestate 但答案并
  • 获取 TreeView 中子节点的 SelectedIndex

    我目前正在使用 C 开发一个 wpf 项目 我创建了一个树视图 其中包含父节点和子节点 我想知道是否有办法获取用户单击的子节点的索引 类似于使用组合框时的 SelectedIndex 我尝试过各种方法 例如 int val TreeView
  • Qml 模块未找到 CPP 类注册与新的 QML_ELEMENT r

    我尝试使用 Qt5 15 0 和新宏 QML ELEMENT 在 QML 中注册我的自定义 CPP 类 但找不到该模块 Qt Creater 帮助文件描述了 QML ELEMENT 的步骤 我也检查了 Qt 手册 但没有幸福的结局 http

随机推荐

  • android 短信(SMS)结构解析

    sms主要结构 id 短信序号 如100 thread id 对话的序号 如100 与同一个手机号互发的短信 其序号是相同的 address 发件人地址 即手机号 如 8613811810000 person 发件人 如果发件人在通讯录中则
  • 使用R建立银行贷款违约模型

    一 项目背景及目的 使用R语言对银行的个人贷款是否违约进行预测 帮助业务部门及时发现问题 以避免损失 二 数据说明 本项目数据集来自 数据科学实战 Python篇 数据集包含8个表 账户表accounts 信用卡表card 客户信息表cli
  • 海伯利安Atlas主网映射今日正式启动

    今日21 00时 GMT 8 起 Atlas主网HYN及节点映射将正式开启 从27日15 00时 GMT 8 起 系统将统一进行升级 用户在15 00 21 00 GMT 8 时间段内将无法从交易账户进行提币操作 待主网映射正式开始 将恢复
  • 设计立方体类

    练习案例 设计立方体类 1 设计立方体类 cube 2 求出立方体的面积和体积 3 分别用全局函数和成员函数判断两个立方体是否相等 include
  • 为什么Java有了synchronized之后还造了Lock锁这个轮子?

    众所周知 synchronized和Lock锁是java并发变成中两大利器 但是为什么Java有了synchronized之后还是提供了Lock接口这个api 难道仅仅只是重复造了轮子这么简单么 本文就来探讨一下这个问题 谈到这个问题 其实
  • 手写算法-python代码实现DBSCAN

    手写算法 python代码实现DBSCAN 原理解析 代码实现 实例演示与sklearn对比 总结 原理解析 上篇文章我们优化了Kmeans聚类算法 最后留下一个问题 Kmeans只适合处理凸样本集 不适合处理非凸样本集 这个问题 怎么解决
  • 2023最系统的网络安全学习路线

    什么是网络安全 网络安全是指保护计算机网络及其系统和应用程序的安全性和完整性 防止未经授权的访问 攻击 病毒 恶意软件和其他安全威胁 它是通过技术 管理和教育等综合手段来确保网络信息安全 网络安全包括网络防火墙 入侵检测系统 数据加密 网络
  • 【大模型】开源大模型汇总以及微调策略

    目录 前言 LLaMA stanford Alpaca Guanaco Vicuna Chinese LLaMA Alpaca Chinese Vicuna Luotuo Chinese Falcon OpenBuddy Falcon Ch
  • 数据结构第一章内容(思维导图以及概要)

    思维导图和内容概要 一 数据结构的基本概念 ps 与数据元素本身的形式 内容 相对位置 个数无关的是数据的逻辑结构 通常要求同一逻辑结构中的所有数据元素具有相同的特性 这意味着不仅数据元素所包含的数据项的个数要相同 而且对应数据项的类型要一
  • (一)python爬虫验证码识别(去除干扰线)

    一 python爬虫验证码识别 去除干扰线 1 开发环境与工具 python27 sklearn pytesser opencv等 pycharm windows7 2 数据集 用request库爬虫抓取某一网站验证码1200张 并做好标注
  • 满满的干货!java计算公式引擎

    Spring 全家桶 Spring 原理 Spring面试题 思维导图 面试题 Spring视频 Spring 原理 Spring特点 Spring 核心组件 Spring常用模块 Spring主要包 Spring常用注解 Sping第三方
  • MYSQL数据库锁常用sql(解决锁表,锁库)

    MYSQL数据库锁常用sql 解决锁表 锁库 查询数据库锁 SELECT FROM INFORMATION SCHEMA INNODB LOCKS 查看等待锁的事务 SELECT FROM INFORMATION SCHEMA INNODB
  • 谷歌整体战略:关于人工智能、云服务和登月计划的未来

    转载自我的博客 谷歌整体战略 关于人工智能 云服务和登月计划的未来 CB Insights 今日发布了一篇关于谷歌业务战略的深度分析报告 Google Strategy Teardown Betting The Future On AI C
  • qt自定义标题栏和边框_在Windows 7中自定义标题栏和其他系统字体

    qt自定义标题栏和边框 Would you like to tweak your title bar and menu fonts in Windows 7 Here s how you can change those little se
  • 嵌入式软件国际化(多语言) 点阵字库选择分析

    概述 嵌入式软件国际化 多语言 点阵字库选择分析 多字节字符集与unicode 多字节编码最大的问题在于每一个语种的字符集编码不兼容 unicode的好处在于将所有人类语种字符都有了统一的编码 现在世界上语言基本都包含在了基本多文种平面0上
  • c语言输出字符串显示在屏幕上,C语言输出printf

    C语言输出printf教程 在 在我们使用 printf 函数时 格式占位符的格式个数一定要与后面的需要输出的变量或者字面量的个数匹配 否则程序报错 printf函数详解 语法 int printf const char format 参数
  • Vue中动画的实现 从基本动画,到炫酷动画。看这一篇就够了

    文章目录 Vue中的基本动画实现 动画类名的重定义 使用第三方的动画库 我就选择其中一个库做示范其他都一样 Vue中的基本动画实现 直接一点 基本动画的步骤 在需要加动画的地方 加入transition
  • EXCEL实现多行多列转为一行多列形式,OFFSET函数

    1 需要实现数据多行多列转为一行多列的数据 2 使用函数 OFFSET A 1 COLUMN A1 1 3 MOD COLUMN A1 1 3 可根据实际数据情况替换数字 引用单元格 3 实现效果 4 操作步骤 观察数据 输入公式 点击回车
  • C++中的STL中(容器、迭代器、适配器、配置器)

    首先明确STL中的六大组成部分 容器 迭代器 适配器 算法 仿函数 配置器 一 C 中的容器 顺序容器 关联容器 容器适配器 1 顺序容器 2 关联容器 3 容器适配器 二 STL中 容器 适配器的关系 参考博客如下 C 顺序性容器 关联性
  • QT固定文件名格式串转化为TreeView在界面上展示文件树形目录

    获得的文件串格式 file1 1 sss txt file1 bin zip file2 linpanhu docx qmake vc bat send zip 思路 gt gt gt file1 1 sss txt file1 bin z