当前位置: 首页 > news >正文

QT 目录

QT 目录

在Qt框架中,QDir 是一个用于操作目录和文件路径的类。

它提供了许多方法来处理目录和文件,例如列出目录内容、创建目录、删除目录等。

// QDir 类是 Qt 框架中用于操作目录和文件路径的重要类。以下是 QDir 类的所有成员函数和枚举类型的详细列表:// 枚举类型
enum QDir::Filter {Dirs,         // 只列出目录AllDirs,      // 列出所有目录,包括隐藏目录Files,        // 只列出文件Drives,       // 列出驱动器(在 Windows 上)NoSymLinks,   // 不列出符号链接NoDotAndDotDot, // 不列出 "." 和 ".."AllEntries,   // 列出所有条目(目录和文件)Readable,     // 只列出可读的条目Writable,     // 只列出可写的条目Executable,   // 只列出可执行的条目Modified,     // 只列出已修改的条目Hidden,       // 列出隐藏条目System,       // 列出系统条目CaseSensitive // 区分大小写
};enum QDir::SortFlag {Name,         // 按名称排序Time,         // 按修改时间排序Size,         // 按大小排序Type,         // 按类型排序Unsorted,     // 不排序NoSort,       // 不排序DirsFirst,    // 目录在前DirsLast,     // 目录在后Reversed,     // 反向排序IgnoreCase,   // 忽略大小写LocaleAware   // 使用本地化排序
};// 构造函数
QDir();
QDir(const QDir &dir);
QDir(const QString &path);
QDir(const QString &path, const QString &nameFilter, SortFlags sort, Filters filters);// 析构函数
~QDir();// 公共成员函数
QString absoluteFilePath(const QString &fileName) const; // 返回文件的绝对路径
QString absolutePath() const; // 返回目录的绝对路径
QString canonicalPath() const; // 返回目录的规范路径
bool cd(const QString &dirName); // 切换到指定目录
bool cdUp(); // 切换到上级目录
uint count() const; // 返回目录中的条目数量
QString dirName() const; // 返回目录名称
QFileInfoList entryInfoList(const QStringList &nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort) const; // 返回目录条目的信息列表
QFileInfoList entryInfoList(Filters filters = NoFilter, SortFlags sort = NoSort) const; // 返回目录条目的信息列表
QStringList entryList(const QStringList &nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort) const; // 返回目录条目的名称列表
QStringList entryList(Filters filters = NoFilter, SortFlags sort = NoSort) const; // 返回目录条目的名称列表
bool exists(const QString &name) const; // 检查指定名称的条目是否存在
bool exists() const; // 检查目录是否存在

引例

#include <QCoreApplication>
#include <QDir>
#include <QStringList>
#include <QDebug>//自定义函数,获取指定目录下的文件信息
qint64 getDirFileSize(const QString& filePath)
{double size = 0;//遍历路径所有文件和子目录,计算大小QDir dir(filePath);for (auto finfo: dir.entryInfoList(QDir::Files )){//只遍历文件size += finfo.size();}//遍历子目录for(auto finfo: dir.entryList(QDir::Dirs|QDir::NoDotAndDotDot)){size = size+getDirFileSize(filePath + QDir::separator() + finfo);//递归调用}char unit='B';double currentSize=size;if (currentSize>1024){currentSize=currentSize/1024;unit='K';if (currentSize>1024){currentSize=currentSize/1024;unit='M';if (currentSize>1024){currentSize=currentSize/1024;unit='G';if (currentSize>1024){currentSize=currentSize/1024;unit='T';}}}}qDebug() << "目录: "<<  filePath << " 大小: " <<currentSize << unit;//保留两位小数//返回大小return currentSize;
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);//获取当前目录QString currentPath = QDir::currentPath();qDebug() << "当前目录: " << currentPath;qDebug() << "当前目录下的文件大小: " << getDirFileSize(currentPath);return a.exec();
}

文件夹浏览器

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>#include <QListWidget>//引入了列表控件
#include <QListWidgetItem>//引入了列表项控件
#include <QLineEdit>//引入了文本输入框控件
#include <QDir>//引入了目录处理类
#include <QFileInfoList> //引入了文件信息列表类
#include <QBoxLayout> //引入了布局管理类
#include <QStringList> //引入了字符串列表类class Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();private:QLineEdit *filelineEdit;//文件路径输入框QListWidget *filelistWidget;//文件列表控件QBoxLayout *mainLayout;//主布局public:void setFileDir(QFileInfoList fileInfoList);//设置文件目录public slots:void displayDir(QDir dir); //显示目录void displayFile(QListWidgetItem *item); //显示文件
};
#endif // DIALOG_H
#include "dialog.h"Dialog::Dialog(QWidget *parent): QDialog(parent)
{setWindowTitle("文件目录");//引入logo图片this->setWindowIcon(style()->standardIcon(QStyle::SP_FileDialogContentsView));mainLayout=new QVBoxLayout(this);filelineEdit=new QLineEdit();filelistWidget=new QListWidget();//显示文件列表mainLayout->addWidget(filelineEdit);mainLayout->addWidget(filelistWidget);QString root ="/"; //设置根目录QDir dir(root);//打开根目录QStringList strlist;//存放目录下的文件名strlist<<"*";//设置显示所有文件QFileInfoList list=dir.entryInfoList(strlist);//获取目录下所有文件信息setFileDir(list);connect(filelistWidget,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(displayFile(QListWidgetItem*)));
}Dialog::~Dialog() {}//设置文件目录
void Dialog::setFileDir(QFileInfoList fileInfoList){filelistWidget->clear();//清空文件列表for(int i=0;i<fileInfoList.size();i++) {//遍历文件信息QFileInfo fileInfo = fileInfoList.at(i);//获取文件信息if (fileInfo.isDir()) {//如果是目录QListWidgetItem *item = new QListWidgetItem(style()->standardIcon(QStyle::SP_DirIcon), fileInfo.fileName());item->setData(Qt::UserRole, fileInfo.absoluteFilePath());     //设置item的用户数据为目录路径filelistWidget->addItem(item);} else {//如果是文件QListWidgetItem *item = new QListWidgetItem(style()->standardIcon(QStyle::SP_FileIcon), fileInfo.fileName());item->setData(Qt::UserRole, fileInfo.absoluteFilePath());     //设置item的用户数据为文件路径filelistWidget->addItem(item);}}
}//显示目录
void Dialog::displayDir(QDir dir) {QStringList strlist;//存放目录下的文件名strlist<<"*";//设置显示所有文件QFileInfoList list=dir.entryInfoList(strlist,QDir::Dirs|QDir::Files);//获取目录下所有文件信息setFileDir(list);//设置文件目录}//显示文件
void Dialog::displayFile(QListWidgetItem *item){QDir dir;QString str=item->text();dir.setPath(filelineEdit->text());dir.cd(str);filelineEdit->setText(dir.absolutePath());displayDir(dir);}

文件信息获取示例

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>#include <QLabel>
#include <QLineEdit>
#include <QCheckBox>
#include <QPushButton>#include <QFileDialog>
#include <QDateTime>
#include <QBoxLayout>class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:QLabel *labelfilename;QLineEdit *qlineeditfilename;QPushButton *buttonbrowse;QCheckBox *checkboxisfile;//文件QCheckBox *checkboxisdir;//文件夹QCheckBox *checkboxisreadonly;//只读QCheckBox *checkboxishidden;//隐藏QCheckBox *checkboxisexecutable;//执行QPushButton *buttongetfileinfo;QLabel *labelfilesize;QLineEdit* qlineeditfilesize;//文件创建时间QLabel *labelfilecreatetime;QLineEdit *qlineeditfilecreatetime;//修改时间QLabel *labelfilemodifytime;QLineEdit *qlineeditfilemodifytime;//文件访问时间QLabel *labelfileaccesstime;QLineEdit *qlineeditfileaccesstime;//文件属性QLabel *labelfileattribute;private slots://获取选择的文件路径void getfilepathname();//获取文件信息void getfileinfo();
};
#endif // MAINWINDOW_H
#include <QMessageBox>
#include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{setWindowTitle("获取文件属性");//删除当前布局LayoutQLayout *layout = this->layout();if (layout!= nullptr) {delete layout;}//创建新的布局QGridLayout *mainLayout = new QGridLayout();//setLayout(mainLayout);labelfilename = new QLabel("文件路径:");qlineeditfilename = new QLineEdit();buttonbrowse = new QPushButton("浏览");mainLayout->addWidget(labelfilename, 0, 0);mainLayout->addWidget(qlineeditfilename, 0, 1, 1, 4);mainLayout->addWidget(buttonbrowse, 0, 5);labelfilesize = new QLabel("文件大小:");qlineeditfilesize = new QLineEdit();mainLayout->addWidget(labelfilesize, 1, 0);mainLayout->addWidget(qlineeditfilesize, 1, 1, 1, 5);labelfilecreatetime = new QLabel("创建时间:");qlineeditfilecreatetime = new QLineEdit();mainLayout->addWidget(labelfilecreatetime, 2, 0);mainLayout->addWidget(qlineeditfilecreatetime, 2, 1, 1, 5);labelfilemodifytime = new QLabel("修改时间:");qlineeditfilemodifytime = new QLineEdit();mainLayout->addWidget(labelfilemodifytime, 3, 0);mainLayout->addWidget(qlineeditfilemodifytime, 3, 1, 1, 5);labelfileaccesstime = new QLabel("访问时间:");qlineeditfileaccesstime = new QLineEdit();mainLayout->addWidget(labelfileaccesstime, 4, 0);mainLayout->addWidget(qlineeditfileaccesstime, 4, 1, 1, 5);labelfileattribute= new QLabel("文件属性:");mainLayout->addWidget(labelfileattribute, 5, 0);checkboxisfile=new QCheckBox("文件");checkboxisdir=new QCheckBox("目录");checkboxisreadonly=new QCheckBox("只读");checkboxishidden=new QCheckBox("隐藏");checkboxisexecutable=new QCheckBox("可执行");mainLayout->addWidget(checkboxisfile, 6, 0);mainLayout->addWidget(checkboxisdir, 6, 1);mainLayout->addWidget(checkboxisreadonly, 6, 2);mainLayout->addWidget(checkboxishidden, 6, 3);mainLayout->addWidget(checkboxisexecutable, 6, 4);buttongetfileinfo = new QPushButton("获取文件信息");mainLayout->addWidget(buttongetfileinfo, 7, 0, 1, 6);QVBoxLayout *vbox = new QVBoxLayout(this);//创建垂直布局vbox->addLayout(mainLayout);connect(buttonbrowse, SIGNAL(clicked()), this, SLOT(getfilepathname()));connect(buttongetfileinfo, SIGNAL(clicked()), this, SLOT(getfileinfo()));
}MainWindow::~MainWindow() {}
//获取选择的文件路径
void MainWindow::getfilepathname(){QString path;//可以选择目录和文件//path = QFileDialog::getExistingDirectory(this, "选择目录", "");path = QFileDialog::getOpenFileName(this, "选择文件", "", "All Files (*)");qlineeditfilename->setText(path);}
//获取文件信息
void MainWindow::getfileinfo(){QString filepath = qlineeditfilename->text();QFileInfo fileinfo(filepath);//获取文件信息if(fileinfo.exists()) {//判断文件是否存在qint64 size = fileinfo.size();//获取文件大小QDateTime createtime =fileinfo.birthTime();//获取创建时间QDateTime modifytime =fileinfo.lastModified();//获取修改时间QDateTime accesstime =fileinfo.lastRead();//获取访问时间qlineeditfilesize->setText(QString::number(size/1024.000)+"KB");//转换单位qlineeditfilecreatetime->setText(createtime.toString("yyyy-MM-dd hh:mm:ss"));qlineeditfilemodifytime->setText(modifytime.toString("yyyy-MM-dd hh:mm:ss"));qlineeditfileaccesstime->setText(accesstime.toString("yyyy-MM-dd hh:mm:ss"));if(fileinfo.isFile()){checkboxisfile->setChecked(true);checkboxisdir->setChecked(false);}else{checkboxisfile->setChecked(false);checkboxisdir->setChecked(true);}if(fileinfo.isHidden()){//判断是否隐藏checkboxishidden->setChecked(true);}else {checkboxishidden->setChecked(false);}if(fileinfo.isReadable()) {//判断是否只读checkboxisreadonly->setChecked(true);}else{checkboxisreadonly->setChecked(false);}if(fileinfo.isExecutable()) {//判断是否可执行checkboxisexecutable->setChecked(true);}else{checkboxisexecutable->setChecked(false);}}else{QMessageBox::warning(this, "错误", "文件不存在!");return;}}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 学习node.js 七 http 模块
  • 回归分析系列19— 多项式回归进阶
  • Kubernetes 中如何对 etcd 进行备份和还原
  • AI 未来两年:史无前例的变革与挑战
  • 《图解设计模式》笔记(四)分开考虑
  • 2024.8.23
  • SolidityFoundry Merkle Airdrop
  • Python TensorFlow进阶篇
  • 安科瑞AEM系列碳排放碳结算计量电表产品介绍
  • 芋道cloud v2.2.0发布,支持模块选配,丢弃简易版
  • Golang | Leetcode Golang题解之第371题两整数之和
  • 栈的实现.
  • 主线Buildroot开发
  • Kafka运行机制(二):消息确认,消息日志的存储和回收,生产者消息分区
  • Postman接口自动化测试:从入门到实践!
  • 分享的文章《人生如棋》
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • Javascript 原型链
  • JavaScript创建对象的四种方式
  • JavaScript函数式编程(一)
  • Leetcode 27 Remove Element
  • supervisor 永不挂掉的进程 安装以及使用
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Webpack 4 学习01(基础配置)
  • 从0到1:PostCSS 插件开发最佳实践
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 给初学者:JavaScript 中数组操作注意点
  • 构建二叉树进行数值数组的去重及优化
  • 基于HAProxy的高性能缓存服务器nuster
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 前端技术周刊 2019-01-14:客户端存储
  • 小李飞刀:SQL题目刷起来!
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 仓管云——企业云erp功能有哪些?
  • ​什么是bug?bug的源头在哪里?
  • ​学习一下,什么是预包装食品?​
  • # windows 运行框输入mrt提示错误:Windows 找不到文件‘mrt‘。请确定文件名是否正确后,再试一次
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #### go map 底层结构 ####
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (Python第六天)文件处理
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (六)DockerCompose安装与配置
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (强烈推荐)移动端音视频从零到上手(上)
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)h264中avc和flv数据的解析
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)Unity3DUnity3D在android下调试
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .ai域名是什么后缀?