如何利用类QFileSystemModel来获取某个目录下的所有文件名

zh852 2011-01-10 11:53:44
如题
...全文
1974 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
noodle123 2013-04-12
  • 打赏
  • 举报
回复
引用 5 楼 yangglemu 的回复:
引用 4 楼 zh852 的回复:不是的,我的意思是在一个目录下,如何实现文件的过滤,当我需要图片文件时,经过过滤后该文件夹中只剩下文件夹和图片文件(而其他的文件都别过滤了)。这个怎么实现呢 这个功能要用QDirModel模型好些: C/C++ code?123456789101112131415#include "mainwindow.h"#include "u……
真乃神人也,解决了我的大问题,顶起来。 10楼的答案也可以,再顶。
zhiquan 2011-09-23
  • 打赏
  • 举报
回复
QFileSystemModel *pModel = new QFileSystemModel(this);
//pModel->setFilter(QDir::Dirs| QDir::Files | QDir::NoDotAndDotDot);
pModel->setNameFilters( QStringList() << "*.mvl" );
pModel->setNameFilterDisables(false);

就行,默认的Filter是QDir::AllEntries | QDir::NoDotAndDotDot | QDir::AllDirs,QDir::AllDirs保证所有的目录显示,而不受namefilters约束
那一片海 2011-03-19
  • 打赏
  • 举报
回复
要过滤的话,在匹配文件的时候加个正则表达式就可以实现了
那一片海 2011-03-19
  • 打赏
  • 举报
回复
要过滤的话,在匹配文件的时候加个正则表达式就可以实现了
slylike1991 2011-03-16
  • 打赏
  • 举报
回复
谢谢三楼!!解决我一个难题啊!
cc5358979 2011-01-25
  • 打赏
  • 举报
回复
楼上的在加上一句 model->setNameFilterDisables(false);灰色的就不会列出来了,这样就可以完全过滤需要的文件了
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zh852 的回复:]

不是的,我的意思是在一个目录下,如何实现文件的过滤,当我需要图片文件时,经过过滤后该文件夹中只剩下文件夹和图片文件(而其他的文件都别过滤了)。这个怎么实现呢
[/Quote]

这个功能要用QDirModel模型好些:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDirModel>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
model = new QDirModel(this);
model->setFilter(QDir::AllDirs | QDir::Files | QDir::NoSymLinks);
QStringList filter;
filter<<"*.jpg"<<"*.png"<<"*.bmp"<<"*.gif";
model->setNameFilters(filter);
ui->treeView->setModel(model);
}


用QFileSystemModel能过滤,但是它将不符合要求的文件也列出来了,虽然名字是灰色的,也不能选取,但看着不爽,用QDirModel就没这个问题,不符合要求的文件都藏起来了看不到
zh852 2011-01-13
  • 打赏
  • 举报
回复
不是的,我的意思是在一个目录下,如何实现文件的过滤,当我需要图片文件时,经过过滤后该文件夹中只剩下文件夹和图片文件(而其他的文件都别过滤了)。这个怎么实现呢
  • 打赏
  • 举报
回复
QFileSystemModel的两个方法:
比如有个文件: D:\ABC\data.txt
fileName()获取文件名 data.txt
filePath()获取目录 D:\ABC\data.txt
要提取什么样的文件名搞不出来?

连接信号:
connect(ui->treeView,SIGNAL(clicked(QModelIndex)),this,SLOT(onClicked(QModelIndex)));
槽函数:
void MainWindow::onClicked(const QModelIndex &index)
{
qDebug()<<model->filePath(index); //应该能满足你的要求
qDebug()<<model->fileName(index);
}
zh852 2011-01-11
  • 打赏
  • 举报
回复
试过 感觉不对,依然无法将文件名全部提取出来,而且文档中给的一个相关的代码片段貌似有点小问题。

我转而用QDirmodel做了,但是又碰到一个问题,使用类QDirModel不能对指定文件类型过滤。
如我要过滤图片文件,用setfiltername函数会将文件夹也过滤掉,而其他的 似乎也不行。
  • 打赏
  • 举报
回复

#include <QFileSystemModel>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QFileSystemModel *model = new QFileSystemModel(this);
model->setRootPath("");//只有这个函数被调用后模型才加载数据
model->setFilter(QDir::Dirs);//只显示目录,如果在界面加个ListView配合,就是个资源管理器了
ui->treeView->setModel(model);
}


QFileSystemModel在自己的线程上工作(不上用GUI线程),它装载完数据以后,会发出directoryLoaded信号
它可以查看文件信息,重命名文件,建立/删除目录==

16,818

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧