[QT]文件夹过滤问题
一、问题描述:
代码示例如下
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]文件夹过滤问题相关推荐
- U-Boot源码目录分析(VScode工程创建及文件夹过滤)
参考:U-Boot工程目录介绍 作者:一只青木呀 发布时间: 2020-10-21 14:47:30 网址:https://blog.csdn.net/weixin_45309916/article/ ...
- TortoiseSVN中的“文件和文件夹过滤”在VS项目中的使用
例如: 以下VS项目,在用SVN提交时,有一些临时文件(红色区域)是不需要提交的 希望在提交时,不显示这部分数据. 解决办法: 在TortoiseSVN的设置界面,Global ignore patt ...
- android扫描文件夹过滤文件夹,Android - 简单编写一个空文件/文件夹的扫描器
Android - 简单编写一个空文件/文件夹的扫描器 前言 顾名思义,空文件就是大小为0字节的文件,空文件夹就是子目录没有文件或文件夹的文件夹 实际上,这个功能在很早就有了,大概是在2012-201 ...
- C++ Qt C#文件夹重命名 C#复制文件(夹)
一.C++文件夹重命名方法: 使用MoveFile()方法即可,源文件夹名字和目标文件夹名字都需要完整的路径名称 if (g_oCamera[0].strCodedData != _T("& ...
- beyond compare过滤指定文件或文件夹
在编写代码时往往需要将新代码与之前的老代码进行比较,而这些代码里有一些配置文件是IDE自动生成的,不需要比较,比如,.gitignore.__pycharm__,这时,可以在Beyond Co ...
- linux find 删除文件夹,linux中find与rm实现查找并删除目录或文件linux操作系统 -电脑资料...
在linux中find是查找搜索文件而rm是删除文件,下面我们来看一篇linux中find与rm实现查找并删除目录或文件的实例,希望文章对大家会有所帮助, 删除指定目录下指定文件 find 要查找的目 ...
- 【Auto.js】[zip压缩] 将文件夹压缩成zip包
将一个文件夹压缩成一个zip包,可应用于项目文件夹打包成zip, 文件夹过滤了目录中的空文件夹,因此,空文件夹不会被打包到zip包中. 由于本人JS知识有限,JAVA也不懂, 导致该函数, 打包大型文 ...
- 如何在同一台电脑上保持两个文件夹的内容同步更新?
很多时候我们因工作需要,想要在同一台电脑上保持两个文件夹的内容文件同步更新,保持一致.那么除了人工手动复制粘贴,还有其他方法吗?今天小西就给大家介绍一款文件同步备份软件,可实现两个文件夹文件自动同步更 ...
- Qt总结之一:遍历文件夹和文件目录,并过滤和获取文件信息、后缀名、前缀名(一)
一.采用递归和QDir实现文件夹下所有文件遍历的方法 #include <QDir> bool FindFile(const QString & path) {QDir dir(p ...
- 【QT】遍历文件夹和文件目录,并过滤和获取文件信息、后缀名、前缀名
[QT]遍历文件夹和文件目录,并过滤和获取文件信息.后缀名.前缀名 前言: 需要在特定目录或磁盘下查找特定文件 一.筛选目录 (一)单一目录下遍历,筛选特定文件 QDir dir("./Sa ...
最新文章
- 范数(赋范线性空间、向量范数、矩阵范数)
- P1283 平板涂色
- 黄聪:DEDECMS织梦系统共如何添加自定义属性和修改方法
- Android报表库aChartEngine系列
- 从数据处理到人工智能的一批计算生态
- Linux系统挂载NTFS文件系统
- Curator实现分布式锁的基本原理-InterProcessMutex.acquire
- Java微信公众平台获取签名
- 代码 微信小程序 词典_微信小程序+ANKIWEB-学习语言的神器,背诵单词的利剑
- pythonsocket自动化教程_Python基本socket通信控制操作示例
- pe修改rpc服务器不可用,电脑rpc服务器不可用,教你电脑rpc服务器不可用怎么解决...
- 中国各省级行政区公共数据开放平台网址(2021.11.1更新)
- 微信小程序开发——上传图片
- Java打印26个字母
- 思维题 数颜色(洛谷 P3939)
- 电脑版美食大战老鼠放置html,美食大战老鼠电脑版
- 2014高考英语听力,男约女终于成功了
- nmon analyser 使用中报错“宏”不可用的问题及处理
- 接吻的十大忌讳及对策
- mkdir: cannot create directory ‘.ssh’: Permission denied
热门文章
- 正反物质相撞湮灭,是因为电荷因素吗?
- 梦到曦和二字与公司起名
- db2 replace函数的用法_C++常用函数整理
- 关于mysql数据库的说法错误的是_MYSQL数据库2013-2014学年考试试卷
- score函数 机器学习_scikit-learn中的cross_val_score函数scoring参数设置
- python 二分查找法
- 轮播图的效果实现小米商城和京东商城
- 1400 序列分解(dfs)
- pycharm2017自建注册服务器
- 解决ssh登录Host key verification failed