一、问题描述:

代码示例如下

 1 QTreeView *m_tree_view = new QTreeView;2 3 QFileSystemModel *dirModel  = new QFileSystemModel;4 dirModel->setFilter(QDir::Dirs | QDir::NoDotAndDotDot);5 dirModel->setRootPath(QDir::currentPath());6 7 m_tree_view->setModel(dirModel);8 9 QFileSystemModel *fileModel = new QFileSystemModel;
10 fileModel->setFilter(QDir::Files);
11 fileModel->setRootPath(QDir::currentPath());
12
13 QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel;
14 proxyModel->setSourceModel(fileModel);
15
16 QListView  *m_list_view= new QListView;
17 m_list_view->setModel(proxyModel);

为了使得m_tree_view只显示文件夹列表,且m_list_view只显示文件列表。

让m_tree_view的setModel()函数都指向dirModel, m_list_view的setModel()函数指向proxyModel。

然后让m_tree_view双击时连接到on_tree_clicked()函数:

1 void on_tree_clicked(QModelIndex index)
2 {
3     QModelIndex filePathIndex = dirModel->index(index.row(), 0, index.parent());
4     QString filePath = dirModel->filePath(filePathIndex);
5     m_list_view->setRootIndex(proxyModel->mapFromSource(fileModel->setRootPath(filePath)));
6 }

那么执行时,第一次在m_tree_view上点击父目录时,m_list_view只显示父目录下的文件,而过滤掉子文件夹。

但如果在m_tree_view上双击父目录下的任意一个子文件夹,然后再双击父目录,m_list_view就会显示刚才点击的子文件夹和父目录下所有的文件,而没有全部过滤掉文件夹。

二、原因:

fileModel->setRootPath(filePath) 会把filePath的index加入fileModel,而filter没改变的情况下不会再次进行过滤,所以被执行过setRootPath的文件夹都显示出来了。

三、解决办法:

在on_tree_clicked()的最后加上这2句
    fileModel->setFilter(QDir::NoFilter);
    fileModel->setFilter(QDir::Files);
这样就能使fileModel再次执行过滤。

转载于:https://www.cnblogs.com/stevenpan/archive/2013/06/08/3126729.html

[QT]文件夹过滤问题相关推荐

  1. U-Boot源码目录分析(VScode工程创建及文件夹过滤)

    参考:U-Boot工程目录介绍 作者:一只青木呀 发布时间: 2020-10-21 14:47:30 网址:https://blog.csdn.net/weixin_45309916/article/ ...

  2. TortoiseSVN中的“文件和文件夹过滤”在VS项目中的使用

    例如: 以下VS项目,在用SVN提交时,有一些临时文件(红色区域)是不需要提交的 希望在提交时,不显示这部分数据. 解决办法: 在TortoiseSVN的设置界面,Global ignore patt ...

  3. android扫描文件夹过滤文件夹,Android - 简单编写一个空文件/文件夹的扫描器

    Android - 简单编写一个空文件/文件夹的扫描器 前言 顾名思义,空文件就是大小为0字节的文件,空文件夹就是子目录没有文件或文件夹的文件夹 实际上,这个功能在很早就有了,大概是在2012-201 ...

  4. C++ Qt C#文件夹重命名 C#复制文件(夹)

    一.C++文件夹重命名方法: 使用MoveFile()方法即可,源文件夹名字和目标文件夹名字都需要完整的路径名称 if (g_oCamera[0].strCodedData != _T("& ...

  5. beyond compare过滤指定文件或文件夹

        在编写代码时往往需要将新代码与之前的老代码进行比较,而这些代码里有一些配置文件是IDE自动生成的,不需要比较,比如,.gitignore.__pycharm__,这时,可以在Beyond Co ...

  6. linux find 删除文件夹,linux中find与rm实现查找并删除目录或文件linux操作系统 -电脑资料...

    在linux中find是查找搜索文件而rm是删除文件,下面我们来看一篇linux中find与rm实现查找并删除目录或文件的实例,希望文章对大家会有所帮助, 删除指定目录下指定文件 find 要查找的目 ...

  7. 【Auto.js】[zip压缩] 将文件夹压缩成zip包

    将一个文件夹压缩成一个zip包,可应用于项目文件夹打包成zip, 文件夹过滤了目录中的空文件夹,因此,空文件夹不会被打包到zip包中. 由于本人JS知识有限,JAVA也不懂, 导致该函数, 打包大型文 ...

  8. 如何在同一台电脑上保持两个文件夹的内容同步更新?

    很多时候我们因工作需要,想要在同一台电脑上保持两个文件夹的内容文件同步更新,保持一致.那么除了人工手动复制粘贴,还有其他方法吗?今天小西就给大家介绍一款文件同步备份软件,可实现两个文件夹文件自动同步更 ...

  9. Qt总结之一:遍历文件夹和文件目录,并过滤和获取文件信息、后缀名、前缀名(一)

    一.采用递归和QDir实现文件夹下所有文件遍历的方法 #include <QDir> bool FindFile(const QString & path) {QDir dir(p ...

  10. 【QT】遍历文件夹和文件目录,并过滤和获取文件信息、后缀名、前缀名

    [QT]遍历文件夹和文件目录,并过滤和获取文件信息.后缀名.前缀名 前言: 需要在特定目录或磁盘下查找特定文件 一.筛选目录 (一)单一目录下遍历,筛选特定文件 QDir dir("./Sa ...

最新文章

  1. 范数(赋范线性空间、向量范数、矩阵范数)
  2. P1283 平板涂色
  3. 黄聪:DEDECMS织梦系统共如何添加自定义属性和修改方法
  4. Android报表库aChartEngine系列
  5. 从数据处理到人工智能的一批计算生态
  6. Linux系统挂载NTFS文件系统
  7. Curator实现分布式锁的基本原理-InterProcessMutex.acquire
  8. Java微信公众平台获取签名
  9. 代码 微信小程序 词典_微信小程序+ANKIWEB-学习语言的神器,背诵单词的利剑
  10. pythonsocket自动化教程_Python基本socket通信控制操作示例
  11. pe修改rpc服务器不可用,电脑rpc服务器不可用,教你电脑rpc服务器不可用怎么解决...
  12. 中国各省级行政区公共数据开放平台网址(2021.11.1更新)
  13. 微信小程序开发——上传图片
  14. Java打印26个字母
  15. 思维题 数颜色(洛谷 P3939)
  16. 电脑版美食大战老鼠放置html,美食大战老鼠电脑版
  17. 2014高考英语听力,男约女终于成功了
  18. nmon analyser 使用中报错“宏”不可用的问题及处理
  19. 接吻的十大忌讳及对策
  20. mkdir: cannot create directory ‘.ssh’: Permission denied

热门文章

  1. 正反物质相撞湮灭,是因为电荷因素吗?
  2. 梦到曦和二字与公司起名
  3. db2 replace函数的用法_C++常用函数整理
  4. 关于mysql数据库的说法错误的是_MYSQL数据库2013-2014学年考试试卷
  5. score函数 机器学习_scikit-learn中的cross_val_score函数scoring参数设置
  6. python 二分查找法
  7. 轮播图的效果实现小米商城和京东商城
  8. 1400 序列分解(dfs)
  9. pycharm2017自建注册服务器
  10. 解决ssh登录Host key verification failed