目录类QDir

embedded/2024/10/15 21:50:16/

Qt使用"/"来作为通用的目录分隔符,所以表示文件路径的字符串中我们最好用"/"

使用"/",Qt会自动的转换你的路径来匹配你当前使用的操作系统

常用静态方法

获取当前项目所在的路径
[static] QString QDir::currentPath()
获取当前正在执行的exe所在路径
[static] QString QCoreApplication::applicationDirPath()
 获取当前正在执行的exe的全路径,包含exe文件的名称
[static] QString QCoreApplication::applicationFilePath()

常用方法

判断某个目录是否存在
bool QDir::exists() const
根据指定路径创建一个目录
bool QDir::mkpath(const QString &dirPath) const

 比如dirPath为"/AA/BB",则会递归在根目录下创建出AA,在AA下面处创建出BB

创建一个子目录
bool QDir::mkdir(const QString &dirName) const

 比如某个目录为/AA/BB,如果dirName指定为CC,那么会创建一个CC的子目录,路径为/AA/BB/CC

跳转到上一级目录
bool QDir::cdUp()
 获取某个目录下所有文件和目录的完整信息
//参数1:指定过滤器,就是指定过滤出什么类型的文件
//参数2:指定排序规则,就是指定过滤出来的结果如何排序
//返回值:返回一个QFileInfo的列表,存储着每一个过滤出来的文件或者文件夹的完整信息
QFileInfoList QDir::entryInfoList(
QDir::Filters filters = NoFilter, 
QDir::SortFlags sort = NoSort) const

其中filters有以下常用取值(可以通过|将多个取值进行连接):

  • QDir::Dirs,过滤出所有的文件夹
  • QDir::Files,过滤出所有的文件
  • QDir::NoDotAndDotDot,过滤结果中去掉"."和".."
 获取某个目录下所有文件和目录的名字
//参数:同上
//返回值:返回一个QFileInfo的列表,存储着每一个过滤出来的文件或者文件夹的名字
QStringList QDir::entryList(
QDir::Filters filters = NoFilter, 
QDir::SortFlags sort = NoSort) const
获取某个目录的绝对路径(如果是文件的话带名称)
QString QDir::absolutePath() const
  • 如果目录是/AA/BB/cc.txt,则返回/AA/BB/cc.txt
  • 如果是目录/AA/BB,则返回/AA/BB
 获取某个目录下指定文件的绝对路径
QString QDir::absoluteFilePath(const QString &fileName) const

如果指定文件的文件名为main.cpp

  • 如果目录是/AA/BB/cc.txt,则返回/AA/BB/cc.txt/main.cpp
  • 如果是目录/AA/BB,则返回/AA/BB/main.cpp
获取目录名
QString QDir::dirName() const
  • 如果目录是/AA/BB/cc.txt,则返回cc.txt
  • 如果是目录/AA/BB,则返回BB

举例1:获取父目录的路径

QString cur_path = QCoreApplication::applicationDirPath();
QDir d(cur_path);
//跳到上一级
d.cdUp();
QString d_father = d.absolutePath();

举例2:递归遍历某个目录

void qtdirtest(QString path){QDir dir(path);//dir.entryInfoList()获取所有文件的文件信息foreach(QFileInfo mfi ,dir.entryInfoList()){if(mfi.isFile()){qDebug()<< "File :" << mfi.fileName();                //获得文件名称}else//是文件夹的话继续递归遍历{if(mfi.fileName()=="." || mfi.fileName() == "..")continue;qDebug() << "Entry Dir" << mfi.absoluteFilePath();    //获得文件夹名称及路径qtdirtest(mfi.absoluteFilePath());}}
}

举例3:递归获取某个目录的大小

//获取文件夹下面的文件大小总和
qint64 getDirAllFileSize(const QString& path)
{QDir dir(path);qint64 size=0;//先过滤出所有文件//然后获取所有文件的大小foreach (QFileInfo info, dir.entryInfoList(QDir::Files)) {size+=info.size();}//然后过滤出所有的文件夹//递归获取每个文件下所有文件的大小总和foreach (QString dir, dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot)) {//递归获取文件夹下面的文件大小size+=getDirAllFileSize(path+QDir::separator()+dir);}return size;
}

举例4:使用列表展示某个目录下的所有文件和目录,此处为根目录

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include<QLineEdit>
#include<QListWidget>
#include<QListWidgetItem>
#include<QDir>
#include<QFileInfo>
#include<QVBoxLayout>
#include<QStandardPaths>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr) : QWidget(parent){resize(400,600);edit=new QLineEdit("/",this);m_list=new QListWidget(this);QVBoxLayout* v_box=new QVBoxLayout(this);v_box->addWidget(edit);v_box->addWidget(m_list);QString root("/");QDir root_dir(root);QStringList str_list;//获取目录下的所有文件//另一个重载形式,可以根据名称过滤,{"*"}可以过滤出所有QFileInfoList info_list=root_dir.entryInfoList({"*"});//调用展示文件信息到列表控件的函数displayFileInfo(info_list);//列表里的条目被双击时connect(m_list,&QListWidget::itemDoubleClicked,this,[=](QListWidgetItem* item){QString dir_path=item->data(Qt::UserRole+1).toString();//是文件夹则将该文件夹下的文件显示到列表中if(!dir_path.isEmpty()){edit->setText(dir_path);QDir dir_temp(dir_path);QFileInfoList info_list_temp=dir_temp.entryInfoList({"*"});displayFileInfo(info_list_temp);}});}~Widget()=default;
private:QLineEdit* edit;QListWidget* m_list;public slots:void displayFileInfo(QFileInfoList list){//清空列表控件里的数据m_list->clear();for(int i=0;i<list.size();++i){QString file_name=list[i].fileName();QListWidgetItem* item=new QListWidgetItem();item->setText(file_name);if(list[i].isDir()){item->setIcon(QIcon(":/mulu.png"));//要传Qt::UserRole,其他整数值代表其他role,有其他意义--参考:enum Qt::ItemDataRole//是文件夹的话则将文件夹的路径携带进去item->setData(Qt::UserRole+1,QVariant(list[i].filePath()));}if(list[i].isFile()){item->setIcon(QIcon(":/wenjian.png"));}m_list->addItem(item);}}
};
#endif // WIDGET_H

学习链接:https://github.com/0voice


http://www.ppmy.cn/embedded/128089.html

相关文章

YoloDotNet 图像目标检测功能详解

文章目录 一、模型选择与下载二、环境配置与库引用三、图像读取与预处理四、模型加载与初始化五、目标检测执行六、结果展示与分析一、模型选择与下载 在使用 YoloDotNet 进行图像目标检测时,首先需要选择合适的模型。Yolo 有多个版本,如 YoloV5、YoloV8 等,每个版本又有不同…

《大规模语言模型从理论到实践》第一轮学习--Fine-tuning微调

第一轮学习目标&#xff1a;了解大模型理论体系 第二轮学习目标&#xff1a;进行具体实操进一步深入理解大模型 从大语言模型的训练过程来理解微调 大预言模型训练主要包含四个阶段&#xff1a;预训练、有监督微调、奖励建模、强化学习。 预训练&#xff08;Pretraining&…

PHP静态化和伪静态如何实现的

PHP静态化和伪静态的实现方式分别如下&#xff1a; PHP静态化 静态化后的页面可以直接被浏览器访问&#xff0c;无需再经过服务器端的处理&#xff0c;加载速度更快。PHP实现静态化的方法主要有以下几种&#xff1a; 使用输出缓冲区&#xff1a; 通过ob_start()函数开启输出缓…

Swift添加自定义字体

1. 在 Xcode 中添加自定义字体 首先&#xff0c;你需要将自定义字体文件&#xff08;如 .ttf 或 .otf 文件&#xff09;添加到项目中。 将字体文件拖放到项目的资源管理器中&#xff0c;确保选中了 "Copy items if needed"。打开 Info.plist 文件&#xff0c;添加一…

拉拢商家、直播PK,这届双11开始卷平台

文丨郭梦仪 在一声声“上链接”中&#xff0c;不少网友在昨晚已经成为了第一批“尾款人”。第一份战报也在今日傍晚发出。 据天猫双11战报显示&#xff0c;活动首小时&#xff0c;大家电整体成交同比去年双11预售同期暴涨765%。仅开售4小时&#xff0c;老板、TCL、西门子、方太…

Mysql(八) --- 视图

文章目录 前言1.什么是视图&#xff1f;2.创建视图3. 使用视图4. 修改数据4.1.注意事项 5. 删除视图6.视图的优点 前言 前面我们学习了索引&#xff0c;这次我们来学习视图 1.什么是视图&#xff1f; 视图是一个虚拟的表&#xff0c;它是基于一个或多个基本表或其他视图的查询…

arthas常用命令(五)--heapdump 、jvm

heapdump heapdump , 类似 jmap 命令的 heap dump 功能。 dump 到指定文件。 arthas-output 是arthas 生成到项目中的文件。 dump.hprof 是自定义的 dump 文件名称。 [arthas26028]$ heapdump arthas-output/dump.hprof Dumping heap to arthas-output/dump.hprof ... Heap…

掌握精准客流监测数据,及时传达应急事件信息的智慧园区开源了

智慧园区场景视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。用户只需在界…