Qt5开发从入门到精通——第九篇四节( Qt5 文件及磁盘处理—— 文件系统浏览)

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中
在这里插入图片描述

三、原码解析

fileview.h

#ifndef FILEVIEW_H
#define FILEVIEW_H

#include <QDialog>
#include <QLineEdit>
#include <QListWidget>
#include <QVBoxLayout>
#include <QDir>
#include <QListWidgetItem>
#include <QFileInfoList>
#include <QIcon>
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

fileview.cpp

#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);  //显示当前目录下的所有文件
}

main.cpp

#include "fileview.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    FileView w;
    w.show();

    return a.exec();
}

四、总结

Qt5 文件及磁盘处理—— 文件系统浏览会在应用程序开发中经常用到的。

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东.'

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值