Qt 目录操作(QDir 类)及展示系统文件实战 QFilelnfo 类介绍和获取文件属性项目实战
一、目录操作(QDir 类)
QDir 类提供访问系统目录结构
QDir 类提供对目录结构及其内容的访问。QDir 用于操作路径名、访问有关路径和文件的信息以及操作底层文件系统。它还可以用于访问 Qt 的资源系统
Qt 使用“/”作为通用目录分隔符,与“/”在 URL 中用作路径分隔符的方式相同。如果您总是使用“/”作为目录分隔符,Qt 将转换您的路径以符合底层操作系统。
QDir 可以使用相对路径或绝对路径指向文件。绝对路径以目录分隔符开头(在 Windows 下,可以选择以驱动器规格开头)。相对文件名以目录名或文件名开头,并指定相对于当前目录的路径。
下面是QDir的一些常用方法:
-
构造函数:QDir(const QString &path = QString())
-
判断路径是否存在:bool exists() const;
-
判断是否是文件:bool isFile() const;
-
判断是否是文件夹:bool isDir() const;
-
获取当前路径:QString absolutePath() const;
-
获取文件名:QString fileName() const;
-
获取文件目录:QString dirName() const;
-
获取文件大小:qint64 size() const;
-
获取文件的创建时间:QDateTime created() const;
-
获取文件的最后修改时间:QDateTime lastModified() const;
案例分析:
main.cpp
#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<<endl;// 调用此函数求目录占据空间的大小GetDirFileInfoSizeFunc(strPath);return a.exec();
}
编译执行结果:
二、QDir 类综合应用展示系统文件实战操作
展示系统文件如下:

代码示例:
qdirfileviews.h
#ifndef QDIRFILEVIEWS_H
#define QDIRFILEVIEWS_H#include <QDialog>#include <QListWidget> // 列表框
#include <QListWidgetItem>
#include <QLineEdit> // 单行输入框/单行编辑框#include <QDir> // 获取操作路径及底层文件系统
#include <QFileInfoList> // 获取指定目录的基本数据信息#include <QVBoxLayout> // 垂直布局#include <QStringList>class QDirFileViews : public QDialog
{Q_OBJECTpublic:QDirFileViews(QWidget *parent = nullptr);~QDirFileViews();private:QLineEdit *filelineedit; // 显示所选择目录名称QListWidget *filelistwidget; // 列表框:展示目录和文件QVBoxLayout *glayout; // 垂直布局public:void dispfileinfolist(QFileInfoList list); // 显示目录和文件所对应图标public slots:void dispdir(QDir dir);void dispdirshow(QListWidgetItem *item);};
#endif // QDIRFILEVIEWS_H
main.cpp
#include "qdirfileviews.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);QDirFileViews w;w.show();return a.exec();
}
qdirfileviews.cpp
#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);// 信号与槽函数连接connect(filelineedit,SIGNAL(returnPressed()),this,SLOT(dispdir(QDir)));connect(filelistwidget,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(dispdirshow(QListWidgetItem*)));QString root="/";QDir rootDir(root);QStringList strlist;strlist<<"*";// entryInfoList函数获取过滤之后获得的文件名夹下面的文件信息列表QFileInfoList list=rootDir.entryInfoList(strlist);// 调用此函数来显示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("d:/dir.jpg");QString filename=tempfileinfo.fileName();QListWidgetItem *temp=new QListWidgetItem(ico,filename);filelistwidget->addItem(temp);}else if(tempfileinfo.isFile()) // 判断是文件{QIcon ico("d:/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);
}
三、QFilelnfo 类介绍
QFileInfo是一个类,用于获取关于文件或目录的元信息。它提供了各种方法来检索有关文件或目录的信息,例如文件的大小、创建时间、修改时间、访问权限等。QFileInfo类也可以用于检查文件或目录是否存在,并检索每个文件或目录的绝对路径。
该类的构造函数需要一个文件路径或目录路径参数。可以使用QFile类的fileInfo方法来生成QFileInfo对象,或者使用QDir类的entryInfo或entryInfoList方法来生成QFileInfo对象。QFileInfo还提供了许多其他的方法,例如isFile(),isDir(),isExecutable()等,用于检查文件或目录的类型和属性。
QFileInfo类是Qt中用于文件和目录操作的常用类之一,可用于创建、修改或删除文件和目录,或处理文件和目录的元数据。
四、QFilelnfo 类获取文件属性及相关信息实战
案例分析:实现下面功能


代码示例:
getfileinfo.cpp
#include "getfileinfo.h"GetFileInfo::GetFileInfo(QWidget *parent): QDialog(parent)
{setWindowTitle("获取文件属性项目实战模块");labelfilename=new QLabel("文件路径名称:");qlineeditfilename=new QLineEdit;qpushbuttongetfilename=new QPushButton("打开文件...");labelfilesize=new QLabel("文件容量大小:");qlineeditfilesize=new QLineEdit;labelfilecreatetime=new QLabel("文件创建时间:");qlineeditfilecreatetime=new QLineEdit;labelfilemodifytime=new QLabel("文件修改时间:");qlineeditfilemodifytime=new QLineEdit;labelfileaccesstime=new QLabel("文件访问时间:");qlineeditfileaccesstime=new QLineEdit;qlabelfileattribute=new QLabel("文件属性");qcheckboxisfile=new QCheckBox("文件");qcheckboxishide =new QCheckBox("隐藏属性");qcheckboxisreadable =new QCheckBox("只读属性");qcheckboxiswritable=new QCheckBox("只写属性");qcheckboxisexecute=new QCheckBox("执行权限");qpushbuttongetfileattributeinfo=new QPushButton("获取文件属性的全部数据信息...");// 布局QGridLayout *glayout=new QGridLayout;glayout->addWidget(labelfilename,0,0);glayout->addWidget(qlineeditfilename,0,1);glayout->addWidget(qpushbuttongetfilename,0,2);glayout->addWidget(labelfilesize,1,0);glayout->addWidget(qlineeditfilesize,1,1,1,2);glayout->addWidget(labelfilecreatetime,2,0);glayout->addWidget(qlineeditfilecreatetime,2,1,1,2);glayout->addWidget(labelfilemodifytime,3,0);glayout->addWidget(qlineeditfilemodifytime,3,1,1,2);glayout->addWidget(labelfileaccesstime,4,0);glayout->addWidget(qlineeditfileaccesstime,4,1,1,2);// 水平布局QHBoxLayout *hlayout=new QHBoxLayout;hlayout->addWidget(qlabelfileattribute);hlayout->addStretch();QHBoxLayout *hlayoutat=new QHBoxLayout;hlayoutat->addWidget(qcheckboxisfile);hlayoutat->addWidget(qcheckboxishide);hlayoutat->addWidget(qcheckboxisreadable);hlayoutat->addWidget(qcheckboxiswritable);hlayoutat->addWidget(qcheckboxisexecute);QHBoxLayout *hlayoutgetbtn=new QHBoxLayout;hlayoutgetbtn->addWidget(qpushbuttongetfileattributeinfo);// 垂直布局QVBoxLayout *vlayout=new QVBoxLayout(this);vlayout->addLayout(glayout);vlayout->addLayout(hlayout);vlayout->addLayout(hlayoutat);vlayout->addLayout(hlayoutgetbtn);// 信号与槽函数连接connect(qpushbuttongetfilename,SIGNAL(clicked()),this,SLOT(getfilepathandname()));connect(qpushbuttongetfileattributeinfo,SIGNAL(clicked()),this,SLOT(getfileattributeinfo()));
}GetFileInfo::~GetFileInfo()
{
}void GetFileInfo::getfilepathandname()
{QString filepathname;filepathname=QFileDialog::getOpenFileName(this,"打开文件对话框","/","files(*)");qlineeditfilename->setText(filepathname);}void GetFileInfo::getfileattributeinfo()
{QString strfile=qlineeditfilename->text();QFileInfo qfi(strfile);qint64 filesize=qfi.size(); // 获取文件容量大小QDateTime createtime=qfi.created(); // 文件创建时间QDateTime lastmodifytime=qfi.lastModified(); // 最后修改时间QDateTime lastaccesstime=qfi.lastRead(); // 最后访问时间bool bfile=qfi.isFile();bool bhide=qfi.isHidden();bool bread=qfi.isReadable();bool bwrite=qfi.isWritable();bool bexecute=qfi.isExecutable();qlineeditfilesize->setText(QString::number(filesize));qlineeditfilecreatetime->setText(createtime.toString());qlineeditfilemodifytime->setText(lastmodifytime.toString());qlineeditfileaccesstime->setText(lastaccesstime.toString());qcheckboxisfile->setCheckState(bfile?Qt::Checked:Qt::Unchecked);qcheckboxishide->setCheckState(bhide?Qt::Checked:Qt::Unchecked);qcheckboxisreadable->setCheckState(bread?Qt::Checked:Qt::Unchecked);qcheckboxiswritable->setCheckState(bwrite?Qt::Checked:Qt::Unchecked);qcheckboxisexecute->setCheckState(bexecute?Qt::Checked:Qt::Unchecked);}
getfilefo.h
#ifndef GETFILEINFO_H
#define GETFILEINFO_H#include <QDialog>#include <QLabel>
#include <QLineEdit>
#include <QCheckBox>
#include <QPushButton>#include <QFileDialog> // 引用文件对话框
#include <QDateTime>
#include <QHBoxLayout>
#include <QVBoxLayout>class GetFileInfo : public QDialog
{Q_OBJECTpublic:GetFileInfo(QWidget *parent = nullptr);~GetFileInfo();private:QLabel *labelfilename;QLineEdit *qlineeditfilename;QPushButton *qpushbuttongetfilename;// 文件容量大小QLabel *labelfilesize;QLineEdit *qlineeditfilesize;// 文件创建时间QLabel *labelfilecreatetime;QLineEdit *qlineeditfilecreatetime;// 文件修改时间QLabel *labelfilemodifytime;QLineEdit *qlineeditfilemodifytime;// 文件访问时间QLabel *labelfileaccesstime;QLineEdit *qlineeditfileaccesstime;// 文件属性及复选控件QLabel *qlabelfileattribute;QCheckBox *qcheckboxisfile;QCheckBox *qcheckboxishide;QCheckBox *qcheckboxisreadable;QCheckBox *qcheckboxiswritable;QCheckBox *qcheckboxisexecute;QPushButton *qpushbuttongetfileattributeinfo;// 声明槽函数
private slots:void getfilepathandname();void getfileattributeinfo();};
#endif // GETFILEINFO_H
main.cpp
#include "getfileinfo.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);GetFileInfo w;w.show();return a.exec();
}
相关文章:
Qt 目录操作(QDir 类)及展示系统文件实战 QFilelnfo 类介绍和获取文件属性项目实战
一、目录操作(QDir 类) QDir 类提供访问系统目录结构 QDir 类提供对目录结构及其内容的访问。QDir 用于操作路径名、访问有关路径和文件的信息以及操作底层文件系统。它还可以用于访问 Qt 的资源系统 Qt 使用“/”作为通用目录分隔符,与“/”在 URL 中用作路径分…...
2023-9-12 阿里健康2024秋招后端开发-体检及泛医疗二面
1 自我介绍 2 快手实习 2.1 说说你在实习期间遇到的挑战、收获 (1)在设计模式的应用能力上,有了很大的提高,使用模板设计模式,架构实例反向同步到架构定义,使用了策略模式 (2) …...
Qt扫盲-QBrush理论使用总结
Q 理论使用总结 一、概述1. 填充模式2. 笔刷颜色3. 纹理 二、 Qt::GlobalColor 一、概述 QBrush类定义了由 QPainter 绘制的形状的填充模式。画笔有样式、颜色、渐变和纹理。 brush style() 使用Qt::BrushStyle 枚举定义填充模式。默认的笔刷样式是 Qt::NoBrush(取决于你如何…...
互联网Java工程师面试题·Java 面试篇·第三弹
目录 39、JRE、JDK、JVM 及 JIT 之间有什么不同? 40、解释 Java 堆空间及 GC? 41、你能保证 GC 执行吗? 42、怎么获取 Java 程序使用的内存?堆使用的百分比? 43、Java 中堆和栈有什么区别? 44、“ab”…...
如何使用VSCode将iPad Pro转化为功能强大的开发工具?
文章目录 前言1. 本地环境配置2. 内网穿透2.1 安装cpolar内网穿透(支持一键自动安装脚本)2.2 创建HTTP隧道 3. 测试远程访问4. 配置固定二级子域名4.1 保留二级子域名4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问6. iPad通过软件远程vscode6.1 创建TCP隧道 7. ipad远…...
将用友U8的数据可视化需要哪些工具?
将金蝶U8的数据可视化需要一个奥威BI数据可视化工具,以及一套专为用友U8打造的标准化BI数据分析方案。 奥威BI SaaS平台:一键链接用友U8,立得报表 别的BI软件围绕用友U8的数据做可视化:1、准备配置环境;2、下载安装配…...
DOS常用指令
一、dir显示目录 dir命令是Windows系统常用的命令,用于显示目录的文件和子目录的列表。如果不使用参数,此命令将显示磁盘的卷标和序列号,然后是磁盘上的目录和文件列表(包括它们的名称以及每个文件最后修改的日期和时间ÿ…...
【Pycharm中python调用另一个文件类或者函数】
Pycharm中python调用另一个文件类或者函数 本文主要介绍了Pycharm中python调用另一个文件类或者函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 文章目录 Pycha…...
pycharm操作git、前后端项目上传到gitee
pycharm操作git 之前用命令做的所有操作,使用pychrm点点就可以完成 克隆代码 上方工具栏Git ⇢ \dashrightarrow ⇢ Clone ⇢ \dashrightarrow ⇢ 填写地址(http、ssh) 提交到暂存区,提交到版本库,推送到远程 直接…...
jmeter监听每秒点击数(Hits per Second)
jmeter监听每秒点击数(Hits per Second) 下载插件添加监听器执行压测,监听结果 下载插件 点击选项,点击Plugins Manager (has upgrades),点击Available Plugins,搜索5 Additional Graphs安装。 添加监听…...
RabbitMQ 消息模型
参考 【RabbitMQ】RabbitMQ架构模型_rabbitmq结构模型-CSDN博客 之前的学习都只是知道名字,但并没有真正的理解,每次看还是不懂,所以今日理解透 ! RabbitMQ 收发消息过程如下: 首先从消费者开始࿱…...
STM32cubemx对FreeRTOS的适配(工程模板配置)
文章目录 前言一、工程的创建二、什么是CMSIS三、STM32cubemx生成的FreeRTOS工程分析总结 前言 本篇文章将带大家使用STM32cubemx对FreeRTOS进行工程模板的配置。 一、工程的创建 1.开始工程的创建: 2.芯片型号选择: 3.修改时钟为TIM8: …...
SpringSecurity+ Oauth2.0+JWT 0-1
这里写目录标题 准备工作准备SQL添加用户添加依赖准备UserInfoUserMapperUserServiceUserServiceImpl配置SpringDataUserDetailsService 授权服务器:AuthorizationServer配置客户端详细信息管理令牌定义TokenConfig定义AuthorizationServerTokenServices 令牌访问端…...
Echart图表收起/展开后无法重新渲染实现自适应(亲测有效)-开发bug总结5
问题描述: 后台管理系统,左侧的菜单栏是可以展开/收起的,默认是展开,此时页面上的图表加载正常,如果收起后再展开,页面底部就会出现滚动轴,图表没有重新绘制。 网上也查了很多方法。基本都是通…...
互联网Java工程师面试题·Java 面试篇·第二弹
目录 15、什么是不可变对象(immutable object)?Java 中怎么创建一个不可变对象? 16、我们能创建一个包含可变对象的不可变对象吗? 17、Java 中应该使用什么数据类型来代表价格? 18、怎么将 byte 转换为 Str…...
【ARM裸机】ARM入门
1.ARM成长史 2.ARM的商业模式和生态系统 ARM只设计CPU,但是不生产CPU 3.为什么使用三星:S5PV210 4.各种版本号 0. ARM和Cortex Cortex就是ARM公司一个系列处理器的名称。比如英特尔旗下处理器有酷睿,奔腾,赛扬。ARM在最初的处理器…...
webGL编程指南 第三章 矩阵旋转三角形rotatedTriangle_Matrix
我会持续更新关于wegl的编程指南中的代码。 当前的代码不会使用书中的缩写,每一步都是会展开写。希望能给后来学习的一些帮助 git代码地址 :git 接着 上一节中 接着做平移的转化。在本次的案例案例中主要是xy的坐标变量相加,同时传递个给相…...
【常用的Git命令】
Git是一个版本控制系统,它拥有众多的命令。以下是一些常用的Git命令: 配置相关命令: git config --global user.name "Your Name":设置用户姓名git config --global user.email "youremailexample.com":设置用…...
cnn 直线检测笔记
目录 mlsd直线检测: ULSD-ISPRS曲线检测 划线标注工具: 可视化标注代码: mlsd直线检测: mlsd_pytorch...
【Edabit 算法 ★☆☆☆☆☆】 Return Something to Me!
【Edabit 算法 ★☆☆☆☆☆】 Return Something to Me! strings language_fundamentals Instructions Write a function that returns the string "something" joined with a space " " and the given argument a. Examples giveMeSomething(“is bett…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
