当前位置: 首页 > 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;}}

http://www.mrgr.cn/news/6778.html

相关文章:

  • LabVIEW中CANopen Read SDO.vi 和 CANopen Read Write CAN Frame.vi区别
  • 2. Java 中的 List 接口有哪些实现类?
  • 文献阅读:单细胞分辨率下小鼠大脑衰老的分子和空间特征
  • el-table中el-select俩列共用同一数据并且选择不能相同
  • ActiViz实战:ActiViz与VTK的差异踩坑点集合(一)
  • 贪心算法-最大容量问题
  • Java二十三种设计模式-责任链模式(17/23)
  • 无法找到模块“vuex”的声明文件。“../node_modules/vuex/dist/vuex.mjs”隐式拥有 “any“ 类型。
  • 嵌入式智能移动机器人导航系统:状态空间控制算法、路径规划算法、PID控制算法(代码示例)
  • vue mapActions的使用
  • 泛微E9如何更新缓存
  • Adobe Illustrator矢量绘图软件win/mac软件下载安装
  • LeetCode - 315 计算右侧小于当前元素的个数(Java JS Python C C++)
  • Milvus实践(5) ---- 从attu2.4x窥探Milvus数据结构变化及原理
  • 2024小学生古诗文大会暑期备考:吃透历年真题和知识点(持续)
  • Jmeter 性能测试实战教程
  • 无人机随车飞行技术详解
  • sql中exist和in的区别
  • go+gin+vue入门
  • ThreadLocal解惑