CSDN话题挑战赛第2期
参赛话题:学习笔记
欢迎小伙伴的点评✨✨,相互学习c/c++应用开发。🍳🍳🍳
博主🧑🧑 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精神👩🚀
本章节会给大家带来Qt5 文件及磁盘处理—— 文件系统浏览实例详解。
文件系统的浏览是目录操作的一个常用功能。本节介绍如何使用 QDir 类显示文件系统目录及用过滤方式显示文件列表的方法。
- QDir::Filter 定义的过滤方式
QDir::Dirs 按照过滤方式列出所有目录
QDir::AllDirs 列出所有目录,不考虑过滤方式
QDir::Files 只列出文件
QDir::Drives 列出磁盘驱动器 (UNIX 系统无效)
QDir::NoSymLinks 不列出符号连接(对不支持符号连接的操作系统无效)
QDir::NoDotAndDotDot 不列出".“和” … "
QDir::AllEntries 列出目录、文件和磁盘驱动器,相当千 DirslFileslDrives
QDir::Readable 列出所有具有“读“属性的文件和目录
QDir::Writable 列出所有具有“写“属性的文件和目录
QDir::Executable 列出所有具有“执行“属性的文件和目录
QDir::Modified 只列出被修改过的文件 (UNIX 系统无效)
QDir::Hidden 列出隐藏文件(在 UNIX 系统下,隐藏文件的文件名以"."开始)
QDir::System 列出系统文件(在 UNIX 系统下指 FIFO、套接字和设备文件)
QDir::CaseSensitive 文件系统如果区分文件名大小写,则按大小写方式进行过滤
QDir::Name 按名称排序
QDir::Time 按时间排序(修改时间)
QDir::Size 按文件大小排序
QDir::Type 按文件类型排序
QDir::Unsorted 不排序
QDir::DirsFirst 目录优先排序
QDir::DirsLast 目录最后排序
QDir::Reversed 反序
QDir::lgnoreCase 忽略大小写方式排序
QDir::LocaleAware 使用当前本地排序方式进行排序
图一
图二
图标图片
图三
将图片加入到新建的Resources中
#ifndef FILEVIEW_H
#define FILEVIEW_H
#include
#include
#include
#include
#include
#include
#include
#include
class FileView : public QDialog
{
Q_OBJECT
public:
FileView(QWidget *parent = 0,Qt::WindowFlags f=0);
~FileView();
void showFileInfoList(QFileInfoList list);
public slots:
void slotShow(QDir dir);
void slotDirShow(QListWidgetItem * item);
private:
QLineEdit *fileLineEdit;
QListWidget *fileListWidget;
QVBoxLayout *mainLayout;
};
#endif // FILEVIEW_H
#include "fileview.h"
FileView::FileView(QWidget *parent,Qt::WindowFlags f)
: QDialog(parent)
{
setWindowTitle(tr("File View"));
fileLineEdit = new QLineEdit(tr("D:\\Test_log\\1234"));
fileListWidget = new QListWidget;
mainLayout = new QVBoxLayout(this);
mainLayout->addWidget(fileLineEdit);
mainLayout->addWidget(fileListWidget);
connect(fileLineEdit,SIGNAL(returnPressed()),this,SLOT(slotShow (QDir)));
connect(fileListWidget,SIGNAL(itemDoubleClicked (QListWidgetItem*)),this,SLOT(slotDirShow(QListWidgetItem*)));
QString root="D:\\Test_log\\1234";
QDir rootDir(root);
QStringList string;
string<<"*";
QFileInfoList list=rootDir.entryInfoList(string);
showFileInfoList(list);
}
FileView::~FileView()
{
}
/*槽函数 slotShow()实现了显示目录 dir 下的所有文件*/
void FileView::slotShow(QDir dir)
{
QStringList string;
string<<"*";
QFileInfoList list=dir .entryInfoList (string, QDir::AllEntries, QDir:: DirsFirst) ;
//(a)
showFileInfoList(list);
}
/*函数 showFilelnfoList()实现了用户可以双击浏览器中显示的目录进入下一级目录,或单击
" .. "返回上一级目录,顶部的编辑框显示当前所在的目录路径,列表中显示该目录下的所有文
件*/
void FileView::showFileInfoList(QFileInfoList list)
{
fileListWidget->clear(); //首先清空列表控件
for(unsigned int i=0;i<list.count();i++)
{
QFileInfo tmpFileinfo=list. at (i);
if(tmpFileinfo.isDir())
{
QIcon icon(":/src/dir.png");
QString fileName = tmpFileinfo.fileName();
QListWidgetItem *tmp = new QListWidgetItem(icon,fileName);
fileListWidget->addItem(tmp);
}
else if (tmpFileinfo. isFile())
{
QIcon icon(":/src/file.png");
QString fileName=tmpFileinfo.fileName();
QListWidgetItem *tmp = new QListWidgetItem(icon,fileName);
fileListWidget->addItem(tmp);
}
}
}
/*槽函数 slotDirShow()根据用户的选择显示下一级目录的所有文件*/
void FileView::slotDirShow(QListWidgetItem * item)
{
QString str=item->text(); //将下一级的目录名保存在 str 中
QDir dir; //定义一个 QDir 对象
dir.setPath(fileLineEdit->text()); //设置 QDir 对象的路径为当前目录路径
dir.cd(str); //根据下一级目录名重新设置 QDir 对象的路径
fileLineEdit->setText (dir. absolutePath ()) ; //(a)
slotShow(dir); //显示当前目录下的所有文件
}
#include "fileview.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
FileView w;
w.show();
return a.exec();
}
Qt5 文件及磁盘处理—— 文件系统浏览会在应用程序开发中经常用到的。