• 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 
    #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
    
    

    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 
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        FileView w;
        w.show();
    
        return a.exec();
    }
    
    

    四、总结

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

  • 相关阅读:
    【PC电脑windows-学习样例tusb_serial_device-ESP32的USB模拟串口程序+VScode建立工程+usb组件添加+-基础样例学习】
    find命令-随心所欲查找服务器的文件
    【STM32 IIC通信与温湿度传感器AHT20(I2C_AHT20)】
    【Python基础】从数值范围创建数组
    Java笔记(3)
    抖音seo矩阵系统源代码分享
    大数据实训2 - 法律咨询数据分析和服务推荐
    nginx的正向代理、反向代理、负载均衡
    [R] ggplot2 - exercise (“fill =“)
    【无标题】
  • 原文地址:https://blog.csdn.net/weixin_44759598/article/details/127121281