63-目录操作(QDir类)及展示系统文件实战

一、目录操作(QDir 类)

#include <QCoreApplication>

#include <QDir>
#include <QStringList>
#include <QtDebug>

// 自定义函数实现获取目录下大小

qint64 GetDirFileInfoSizeFunc(const QString &qpath)
{
    // QDir类专门用来操作路径名称或底层文件系统,可以使用相对或绝对路径来指向一个文件/目录
    QDir qdirs(qpath);

    qint64 qsize=0; // 存放目录占据空间

    // QFileInfor类提供有关文件系统当中文件名称、路径(位置)、访问权限、文件类型等等信息
    // entryInfoList函数获取过滤之后获得的文件名夹下面的文件信息列表
    foreach(QFileInfo finfo,qdirs.entryInfoList(QDir::Files))
    {
        qsize=qsize+finfo.size();
    }

    // QDir::Dirs列出目录。QDir::separator()不列出文件系统当中的特殊文件
    foreach(QString sDir,qdirs.entryList(QDir::Dirs|QDir::NoDotAndDotDot))
    {
        qsize=qsize+GetDirFileInfoSizeFunc(qpath+QDir::separator()+sDir);
    }

    char uint='B';

    qint64 currentdirsize=qsize;

    if(currentdirsize>1024)
    {
        currentdirsize=currentdirsize/1024;
        uint='K';

        if(currentdirsize>1024)
        {
            currentdirsize=currentdirsize/1024;
            uint='M';
            if(currentdirsize>1024)
            {
                currentdirsize=currentdirsize/1024;
                uint='G';
                if(currentdirsize>1024)
                {
                    currentdirsize=currentdirsize/1024;
                    uint='T';
                }
            }
        }
    }

    qDebug()<<"目录占据空间为:"<<currentdirsize<<"\t"<<qPrintable(qpath);


    return qsize;
}
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 该字符串存储路径
    QString strPath;

    strPath=QDir::currentPath(); // 获取当前目录
    qDebug()<<"当前目录为:"<<strPath<<Qt::endl;

    // 调用此函数求目录占据空间的大小
    GetDirFileInfoSizeFunc(strPath);
    

    return a.exec();
}

 二、QDir 类综合应用展示系统文件实战操作

#ifndef QDIRFILEVIEWS_H
#define QDIRFILEVIEWS_H

#include <QDialog>
#include <QDialog>

#include <QListWidget>  // 列表框
#include <QListWidgetItem>
#include <QLineEdit> // 单行输入框/单行编辑框

#include <QDir> // 获取操作路径及底层文件系统
#include <QFileInfoList> // 获取指定目录的基本数据信息

#include <QVBoxLayout> // 垂直布局

#include <QStringList>


class QDirFileViews : public QDialog
{
    Q_OBJECT

public:
    QDirFileViews(QWidget *parent = nullptr);
    ~QDirFileViews();
private:
    QLineEdit * filelineedit;//显示所选择目录的名称
    QListWidget * filelistwidget;//列表框,展示目录和文件
    QVBoxLayout *glayout; // 垂直布局
public:
    void dispfileinfolist(QFileInfoList list); // 显示目录和文件所对应图标

private slots:
    void dispdir(QDir dir);
    void dispdirshow(QListWidgetItem *item);
};
#endif // QDIRFILEVIEWS_H




//.c
#include "qdirfileviews.h"

QDirFileViews::QDirFileViews(QWidget *parent)
    : QDialog(parent)
{
    resize(500,350);

    setWindowTitle("QDir类综合控件应用测试");


    filelineedit=new QLineEdit("/");
    filelistwidget=new QListWidget;

    glayout=new QVBoxLayout(this);
    glayout->addWidget(filelineedit);
    glayout->addWidget(filelistwidget);

    QString root = "/";
    QDir rootDir(root);
    QStringList strlist;
    strlist<<"*";

    // entryInfoList函数获取过滤之后获得的文件名夹下面的文件信息列表
    QFileInfoList list = rootDir.entryInfoList(strlist);

    // 信号与槽函数连接
    connect(filelineedit,SIGNAL(returnPressed()),this,SLOT(dispdir(QDir)));

    connect(filelistwidget,SIGNAL(itemDoubleClicked(QListWidgetItem*)),
            this,SLOT(dispdirshow(QListWidgetItem*)));

    // 调用此函数来显示
    dispfileinfolist(list);

}

QDirFileViews::~QDirFileViews()
{
}
// 显示目录和文件所对应图标
void QDirFileViews::dispfileinfolist(QFileInfoList list)
{
    filelistwidget->clear();
    for (unsigned int i=0;i<list.count();i++)
    {
        QFileInfo tempfileinfo=list.at(i);
        if(tempfileinfo.isDir())//判断是目录
        {
            //相对路径里常使用 “../” 来表示上一级目录
            QIcon ico("../QDirFileViewProssss/dir.jpg");
            QString filename = tempfileinfo.fileName();
            QListWidgetItem *temp = new QListWidgetItem(ico,filename);
            filelistwidget->addItem(temp);
        }
        else if(tempfileinfo.isFile())//判断是文件
        {
             QIcon ico(":/QDirFileViewProssss/file.jpg");
            QString filename=tempfileinfo.fileName();
            QListWidgetItem *temp=new QListWidgetItem(ico,filename);
            filelistwidget->addItem(temp);
        }

    }



}

void QDirFileViews::dispdir(QDir dir)
{
    QStringList strlist;
    strlist<<"*";

    QFileInfoList fileinfolist=dir.entryInfoList(strlist,QDir::AllEntries,QDir::DirsFirst);


    dispfileinfolist(fileinfolist);
}

void QDirFileViews::dispdirshow(QListWidgetItem *item)
{

    QDir dir;
    QString str=item->text();

    dir.setPath(filelineedit->text());
    dir.cd(str);

    filelineedit->setText(dir.absolutePath());

    dispdir(dir);
}

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值