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…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
