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

Qt 文件目录操作

Qt 文件目录操作

QDir 类提供访问系统目录结构

QDir 类提供对目录结构及其内容的访问。QDir 用于操作路径名、访问有关路径和文件的信息以及操作底层文件系统。它还可以用于访问 Qt 的资源系统。

Qt 使用“/”作为通用目录分隔符,与“/”在 URL 中用作路径分隔符的方式相同。如果您总是使用“/”作为目录分隔符,Qt 将转换您的路径以符合底层操作系统。

QDir 可以使用相对路径或绝对路径指向文件。绝对路径以目录分隔符开头(在 Windows 下,可以选择以驱动器规格开头)。相对文件名以目录名或文件名开头,并指定相对于当前目录的路径。

下面是QDir的一些常用方法:

  1. 构造函数:QDir(const QString &path = QString())
  2. 判断路径是否存在:bool exists() const;
  3. 判断是否是文件:bool isFile() const;
  4. 判断是否是文件夹:bool isDir() const;
  5. 获取当前路径:QString absolutePath() const;
  6. 获取文件名:QString fileName() const;
  7. 获取文件目录:QString dirName() const;
  8. 获取文件大小:qint64 size() const;
  9. 获取文件的创建时间:QDateTime created() const;
  10. 获取文件的最后修改时间:QDateTime lastModified() const;

main函数 main.cpp 文件:

#include "sample7_3QDirFile.h"
#include <QtWidgets/QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);QCoreApplication::setOrganizationName("China University of Petroleum");sample7_3QDirFile w;w.show();return a.exec();
}

sample7_3QDirFile.h 文件

#pragma once#include <QtWidgets/QDialog>
#include "ui_sample7_3QDirFile.h"#include   <QFileSystemWatcher>namespace Ui {class sample7_3QDirFile;
}class sample7_3QDirFile : public QDialog
{Q_OBJECTpublic:sample7_3QDirFile(QWidget *parent = Q_NULLPTR);~sample7_3QDirFile();private:Ui::sample7_3QDirFileClass *ui;public slots:void on_directoryChanged(const QString path);void on_fileChanged(const QString path);private:QFileSystemWatcher  fileWatcher;void showBtnInfo(QObject* btn);private slots:///--------QCoreApplication类---------------void on_pushButton_clicked();void on_pushButton_2_clicked();void on_pushButton_3_clicked();void on_pushButton_4_clicked();void on_pushButton_5_clicked();void on_pushButton_6_clicked();///--------QFile类-文件操作---------------void on_pushButton_7_clicked();void on_pushButton_8_clicked();void on_pushButton_9_clicked();void on_pushButton_10_clicked();void on_pushButton_11_clicked();void on_pushButton_12_clicked();void on_pushButton_13_clicked();void on_pushButton_14_clicked();///--------QFileInfo类 - 文件信息---------------void on_pushButton_15_clicked();void on_pushButton_16_clicked();void on_pushButton_17_clicked();void on_pushButton_18_clicked();void on_pushButton_19_clicked();void on_pushButton_20_clicked();void on_pushButton_21_clicked();void on_pushButton_22_clicked();void on_pushButton_23_clicked();void on_pushButton_24_clicked();void on_pushButton_25_clicked();void on_pushButton_26_clicked();void on_pushButton_27_clicked();void on_pushButton_28_clicked();void on_pushButton_29_clicked();void on_pushButton_30_clicked();void on_pushButton_31_clicked();void on_pushButton_32_clicked();///--------QDir类-目录操作---------------void on_pushButton_33_clicked();void on_pushButton_34_clicked();void on_pushButton_35_clicked();void on_pushButton_36_clicked();void on_pushButton_37_clicked();void on_pushButton_38_clicked();void on_pushButton_39_clicked();void on_pushButton_40_clicked();void on_pushButton_41_clicked();void on_pushButton_42_clicked();void on_pushButton_43_clicked();void on_pushButton_44_clicked();void on_pushButton_45_clicked();void on_pushButton_46_clicked();void on_pushButton_47_clicked();void on_pushButton_48_clicked();void on_pushButton_49_clicked();void on_pushButton_50_clicked();void on_pushButton_51_clicked();void on_pushButton_52_clicked();///--------QTemporaryDir和QTemporaryFile---------------void on_pushButton_53_clicked();void on_pushButton_54_clicked();///--------QFileSystemWatcher类---------------void on_pushButton_55_clicked();void on_pushButton_56_clicked();void on_pushButton_57_clicked();void on_pushButton_58_clicked();//打开文件void on_pushButton_59_clicked();void on_pushButton_60_clicked();void on_pushButton_61_clicked();};

sample7_3QDirFile.cpp 文件:

#include "sample7_3QDirFile.h"#include    <QFileDialog>
#include    <QDateTime>
#include    <QTemporaryDir>
#include    <QTemporaryFile>//解决QT中中文显示乱码问题
#pragma execution_character_set("utf-8")sample7_3QDirFile::sample7_3QDirFile(QWidget *parent): QDialog(parent)
{ui->setupUi(this);this->setWindowFlags(Qt::Window);
}
sample7_3QDirFile::~sample7_3QDirFile()
{delete ui;
}//显示btn的信息
void sample7_3QDirFile::showBtnInfo(QObject *btn)
{ QPushButton *theBtn = static_cast<QPushButton*>(btn);ui->plainTextEdit->appendPlainText(theBtn->text());ui->plainTextEdit->appendPlainText(theBtn->toolTip() + "\n");
}//directoryChanged()信号的槽函数
void sample7_3QDirFile::on_directoryChanged(const QString path)
{ui->plainTextEdit->appendPlainText(path);ui->plainTextEdit->appendPlainText("目录发生了变化\n");
}//fileChanged()信号的槽函数
void sample7_3QDirFile::on_fileChanged(const QString path)
{ui->plainTextEdit->appendPlainText(path);ui->plainTextEdit->appendPlainText("文件发生了变化\n");
}///--------QCoreApplication类---------------
void sample7_3QDirFile::on_pushButton_clicked()
{showBtnInfo(sender());QString str = QCoreApplication::applicationDirPath();ui->plainTextEdit->appendPlainText(str + "\n");
}void sample7_3QDirFile::on_pushButton_2_clicked()
{showBtnInfo(sender());QString str = QCoreApplication::applicationFilePath();ui->plainTextEdit->appendPlainText(str + "\n");
}void sample7_3QDirFile::on_pushButton_3_clicked()
{showBtnInfo(sender());QString str = QCoreApplication::applicationName();ui->plainTextEdit->appendPlainText(str + "\n");
}void sample7_3QDirFile::on_pushButton_4_clicked()
{showBtnInfo(sender());QStringList strList = QCoreApplication::libraryPaths();for (int i = 0; i < strList.count(); i++){ui->plainTextEdit->appendPlainText(strList.at(i));}ui->plainTextEdit->appendPlainText("");
}void sample7_3QDirFile::on_pushButton_5_clicked()
{showBtnInfo(sender());QString str = QCoreApplication::organizationName();ui->plainTextEdit->appendPlainText(str + "\n");}void sample7_3QDirFile::on_pushButton_6_clicked()
{QCoreApplication::exit();
}///--------QFile类-文件操作---------------
void sample7_3QDirFile::on_pushButton_7_clicked()
{showBtnInfo(sender());QString sous = ui->editFile->text(); //源文件QFileInfo   fileInfo(sous);//QString newFile = fileInfo.path() + "/" + fileInfo.baseName() + "--副本." + fileInfo.suffix();QFile::copy(sous, newFile);ui->plainTextEdit->appendPlainText("源文件:" + sous);ui->plainTextEdit->appendPlainText("复制为文件:" + newFile + "\n");
}void sample7_3QDirFile::on_pushButton_8_clicked()
{showBtnInfo(sender());QString sous = ui->editFile->text(); //源文件bool the = QFile::exists(sous);if (the){ui->plainTextEdit->appendPlainText(+"true \n");}else{ui->plainTextEdit->appendPlainText(+"false \n");}
}void sample7_3QDirFile::on_pushButton_9_clicked()
{showBtnInfo(sender());QString sous = ui->editFile->text(); //源文件QFile::remove(sous);ui->plainTextEdit->appendPlainText("删除文件:" + sous + "\n");
}
//QFile::rename()
void sample7_3QDirFile::on_pushButton_10_clicked()
{showBtnInfo(sender());QString sous = ui->editFile->text(); //源文件QFileInfo   fileInfo(sous);//源文件信息QString newFile = fileInfo.path() + "/" + fileInfo.baseName() + ".XYZ"; //更改文件后缀为".XYZ"QFile::rename(sous, newFile); //重命名文件ui->plainTextEdit->appendPlainText("源文件:" + sous);ui->plainTextEdit->appendPlainText("重命名为:" + newFile + "\n");
}void sample7_3QDirFile::on_pushButton_11_clicked()
{showBtnInfo(sender());QString sous = ui->editFile->text(); //源文件QFile   file(sous);QFileInfo   fileInfo(sous);//QString newFile = fileInfo.path() + "/" + fileInfo.baseName() + "--副本." + fileInfo.suffix();file.copy(newFile);ui->plainTextEdit->appendPlainText("源文件:" + sous);ui->plainTextEdit->appendPlainText("复制为文件:" + newFile + "\n");
}void sample7_3QDirFile::on_pushButton_12_clicked()
{showBtnInfo(sender());QString sous = ui->editFile->text(); //源文件QFile   file(sous);bool the = file.exists();if (the)ui->plainTextEdit->appendPlainText(+"true \n");elseui->plainTextEdit->appendPlainText(+"false \n");
}void sample7_3QDirFile::on_pushButton_13_clicked()
{showBtnInfo(sender());QString sous = ui->editFile->text(); //源文件QFile   file(sous);file.remove();ui->plainTextEdit->appendPlainText("删除文件:" + sous + "\n");
}//QFile.rename()
void sample7_3QDirFile::on_pushButton_14_clicked()
{showBtnInfo(sender());QString sous = ui->editFile->text(); //源文件QFile   file(sous); //源文件对象QFileInfo   fileInfo(sous);//源文件信息QString newFile = fileInfo.path() + "/" + fileInfo.baseName() + ".XYZ"; //修改文件后缀为“.XYZ”file.rename(newFile); //重命名文件ui->plainTextEdit->appendPlainText("源文件:" + sous);ui->plainTextEdit->appendPlainText("重命名为:" + newFile + "\n");
}///--------QFileInfo类 - 文件信息---------------
//QFileInfo::absoluteFilePath()
void sample7_3QDirFile::on_pushButton_15_clicked()
{showBtnInfo(sender());QFileInfo  fileInfo(ui->editFile->text());QString  str = fileInfo.absoluteFilePath();ui->plainTextEdit->appendPlainText(str + "\n");
}
//QFileInfo::absolutePath()
void sample7_3QDirFile::on_pushButton_16_clicked()
{showBtnInfo(sender());QFileInfo  fileInfo(ui->editFile->text());QString  str = fileInfo.absolutePath();ui->plainTextEdit->appendPlainText(str + "\n");
}void sample7_3QDirFile::on_pushButton_17_clicked()
{showBtnInfo(sender());QFileInfo  fileInfo(ui->editFile->text());QString  str = fileInfo.fileName();ui->plainTextEdit->appendPlainText(str + "\n");
}void sample7_3QDirFile::on_pushButton_18_clicked()
{showBtnInfo(sender());QFileInfo  fileInfo(ui->editFile->text());QString  str = fileInfo.filePath();ui->plainTextEdit->appendPlainText(str + "\n");
}//QFileInfo.size()
void sample7_3QDirFile::on_pushButton_19_clicked()
{showBtnInfo(sender());QFileInfo  fileInfo(ui->editFile->text());qint64  dt = fileInfo.size();QString  str = QString("%1 Bytes").arg(dt);ui->plainTextEdit->appendPlainText(str + "\n");
}//QFileInfo.path()
void sample7_3QDirFile::on_pushButton_20_clicked()
{showBtnInfo(sender());QFileInfo  fileInfo(ui->editFile->text());QString  str = fileInfo.path();ui->plainTextEdit->appendPlainText(str + "\n");
}//QFileInfo.basename()
void sample7_3QDirFile::on_pushButton_21_clicked()
{showBtnInfo(sender());QFileInfo  fileInfo(ui->editFile->text());QString  str = fileInfo.baseName();ui->plainTextEdit->appendPlainText(str + "\n");
}void sample7_3QDirFile::on_pushButton_22_clicked()
{showBtnInfo(sender());QFileInfo  fileInfo(ui->editFile->text());QString  str = fileInfo.completeBaseName();ui->plainTextEdit->appendPlainText(str + "\n");}void sample7_3QDirFile::on_pushButton_23_clicked()
{showBtnInfo(sender());QFileInfo  fileInfo(ui->editFile->text());QString  str = fileInfo.suffix();ui->plainTextEdit->appendPlainText(str + "\n");
}void sample7_3QDirFile::on_pushButton_24_clicked()
{showBtnInfo(sender());QFileInfo  fileInfo(ui->editFile->text());QString  str = fileInfo.completeSuffix();ui->plainTextEdit->appendPlainText(str + "\n");
}void sample7_3QDirFile::on_pushButton_25_clicked()
{showBtnInfo(sender());QFileInfo  fileInfo(ui->editDir->text());bool  the = fileInfo.isDir();if (the)ui->plainTextEdit->appendPlainText(+"true \n");elseui->plainTextEdit->appendPlainText(+"false \n");
}void sample7_3QDirFile::on_pushButton_26_clicked()
{showBtnInfo(sender());QFileInfo  fileInfo(ui->editFile->text());bool  the = fileInfo.isFile();if (the)ui->plainTextEdit->appendPlainText(+"true \n");elseui->plainTextEdit->appendPlainText(+"false \n");
}void sample7_3QDirFile::on_pushButton_27_clicked()
{showBtnInfo(sender());QFileInfo  fileInfo(ui->editFile->text());bool  the = fileInfo.isExecutable();if (the)ui->plainTextEdit->appendPlainText(+"true \n");elseui->plainTextEdit->appendPlainText(+"false \n");
}void sample7_3QDirFile::on_pushButton_28_clicked()
{showBtnInfo(sender());QFileInfo  fileInfo(ui->editFile->text());QDateTime  dt = fileInfo.created();QString  str = dt.toString("yyyy-MM-dd hh:mm:ss");ui->plainTextEdit->appendPlainText(str + "\n");
}void sample7_3QDirFile::on_pushButton_29_clicked()
{showBtnInfo(sender());QFileInfo  fileInfo(ui->editFile->text());QDateTime  dt = fileInfo.lastModified();QString  str = dt.toString("yyyy-MM-dd hh:mm:ss");ui->plainTextEdit->appendPlainText(str + "\n");
}void sample7_3QDirFile::on_pushButton_30_clicked()
{showBtnInfo(sender());QFileInfo  fileInfo(ui->editFile->text());QDateTime  dt = fileInfo.lastRead();QString  str = dt.toString("yyyy-MM-dd hh:mm:ss");ui->plainTextEdit->appendPlainText(str + "\n");
}//静态函数exists()
void sample7_3QDirFile::on_pushButton_31_clicked()
{showBtnInfo(sender());bool  the = QFileInfo::exists(ui->editFile->text());if (the)ui->plainTextEdit->appendPlainText(+"true \n");elseui->plainTextEdit->appendPlainText(+"false \n");}
void sample7_3QDirFile::on_pushButton_32_clicked()
{showBtnInfo(sender());QFileInfo  fileInfo(ui->editFile->text());bool  the = fileInfo.exists();if (the)ui->plainTextEdit->appendPlainText(+"true \n");elseui->plainTextEdit->appendPlainText(+"false \n");
}///--------QDir类-目录操作---------------
void sample7_3QDirFile::on_pushButton_33_clicked()
{showBtnInfo(sender());QString  str = QDir::tempPath();ui->plainTextEdit->appendPlainText(str + "\n");
}void sample7_3QDirFile::on_pushButton_34_clicked()
{showBtnInfo(sender());QString  str = QDir::rootPath();ui->plainTextEdit->appendPlainText(str + "\n");
}void sample7_3QDirFile::on_pushButton_35_clicked()
{showBtnInfo(sender());QString  str = QDir::homePath();ui->plainTextEdit->appendPlainText(str + "\n");
}void sample7_3QDirFile::on_pushButton_36_clicked()
{showBtnInfo(sender());QFileInfoList  strList = QDir::drives();for (int i = 0; i < strList.count(); i++){ui->plainTextEdit->appendPlainText(strList.at(i).path());}ui->plainTextEdit->appendPlainText("\n");
}void sample7_3QDirFile::on_pushButton_37_clicked()
{showBtnInfo(sender());QString  str = QDir::currentPath();ui->plainTextEdit->appendPlainText(str + "\n");
}void sample7_3QDirFile::on_pushButton_38_clicked()
{showBtnInfo(sender());QDir::setCurrent(ui->editDir->text());QString  str = QDir::currentPath();ui->editDir->setText(str);ui->plainTextEdit->appendPlainText("设置当前路径为:" + str + "\n");
}
//-----文件和目录操作------
void sample7_3QDirFile::on_pushButton_39_clicked()
{showBtnInfo(sender());QString subDir = "subdir1";QDir    dir(ui->editDir->text());bool   ok = dir.mkdir(subDir);if (ok){ui->plainTextEdit->appendPlainText("所选目录下成功新建一个目录 " + subDir + "\n");}else{ui->plainTextEdit->appendPlainText("创建目录失败\n");}
}
void sample7_3QDirFile::on_pushButton_40_clicked()
{showBtnInfo(sender());QString sous(ui->editDir->text());QDir    dir(sous);bool   ok = dir.rmdir(sous);if (ok){ui->plainTextEdit->appendPlainText("成功删除所选目录\n" + sous + "\n");}else{ui->plainTextEdit->appendPlainText("删除失败\n");}
}
void sample7_3QDirFile::on_pushButton_41_clicked()
{showBtnInfo(sender());QDir    dir(ui->editDir->text());QString sous(ui->editFile->text());bool ok = dir.remove(sous);if (ok){ui->plainTextEdit->appendPlainText("删除文件:" + sous + "\n");}else{ui->plainTextEdit->appendPlainText("删除文件失败\n");}
}
void sample7_3QDirFile::on_pushButton_42_clicked()
{showBtnInfo(sender());QDir    dir(ui->editDir->text());QString sous = ui->editFile->text(); //源文件QFileInfo   fileInfo(sous);//QString newFile = fileInfo.path() + "/" + fileInfo.baseName() + ".XYZ";dir.rename(sous, newFile);ui->plainTextEdit->appendPlainText("源文件:" + sous);ui->plainTextEdit->appendPlainText("重命名为:" + newFile + "\n");
}
void sample7_3QDirFile::on_pushButton_43_clicked()
{showBtnInfo(sender());QString curDir = QDir::currentPath();QDir    lastDir(curDir);ui->plainTextEdit->appendPlainText("选择目录之前:" + lastDir.absolutePath());QString aDir = QFileDialog::getExistingDirectory(this, "选择一个目录", curDir, QFileDialog::ShowDirsOnly);if (aDir.isEmpty()){return;}ui->editDir->setText(aDir);lastDir.setPath(aDir);ui->plainTextEdit->appendPlainText("选择目录之后:" + lastDir.absolutePath() + "\n");
}
void sample7_3QDirFile::on_pushButton_44_clicked()
{showBtnInfo(sender());QDir    dir(ui->editDir->text());bool ok = dir.removeRecursively();if (ok){ui->plainTextEdit->appendPlainText("删除目录及文件成功\n");}else{ui->plainTextEdit->appendPlainText("删除目录及文件失败\n");}
}//-----文件或目录信息------
void sample7_3QDirFile::on_pushButton_45_clicked()
{//absoluteFilePath(),showBtnInfo(sender());QDir    dir(ui->editDir->text());QString  str = dir.absoluteFilePath(ui->editFile->text());ui->plainTextEdit->appendPlainText(str + "\n");
}void sample7_3QDirFile::on_pushButton_46_clicked()
{showBtnInfo(sender());QDir    dir(ui->editDir->text());QString  str = dir.absolutePath();ui->plainTextEdit->appendPlainText(str + "\n");}void sample7_3QDirFile::on_pushButton_47_clicked()
{showBtnInfo(sender());QDir    dir(ui->editDir->text());QString  str = dir.canonicalPath();ui->plainTextEdit->appendPlainText(str + "\n");
}void sample7_3QDirFile::on_pushButton_48_clicked()
{showBtnInfo(sender());QDir    dir(ui->editDir->text());QString  str = dir.filePath(ui->editFile->text());ui->plainTextEdit->appendPlainText(str + "\n");}
void sample7_3QDirFile::on_pushButton_49_clicked()
{showBtnInfo(sender());QDir    dir(ui->editDir->text());bool  the = dir.exists();if (the)ui->plainTextEdit->appendPlainText("true \n");elseui->plainTextEdit->appendPlainText("false \n");
}
void sample7_3QDirFile::on_pushButton_50_clicked()
{showBtnInfo(sender());QDir    dir(ui->editDir->text());QString  str = dir.dirName();ui->plainTextEdit->appendPlainText(str + "\n");
}
//列出子目录
void sample7_3QDirFile::on_pushButton_51_clicked()
{showBtnInfo(sender());QDir    dir(ui->editDir->text());QStringList strList = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);ui->plainTextEdit->appendPlainText("所选目录下的所有目录:");for (int i = 0; i < strList.count(); i++){ui->plainTextEdit->appendPlainText(strList.at(i));}ui->plainTextEdit->appendPlainText("\n");}
//列出所有文件
void sample7_3QDirFile::on_pushButton_52_clicked()
{showBtnInfo(sender());QDir    dir(ui->editDir->text());QStringList strList = dir.entryList(QDir::Files);ui->plainTextEdit->appendPlainText("所选目录下的所有文件:");for (int i = 0; i < strList.count(); i++){ui->plainTextEdit->appendPlainText(strList.at(i));}ui->plainTextEdit->appendPlainText("\n");
}///--------QTemporaryDir和QTemporaryFile---------------
//QTemporaryDir
void sample7_3QDirFile::on_pushButton_53_clicked()
{showBtnInfo(sender());QTemporaryDir    dir;dir.setAutoRemove(true);ui->plainTextEdit->appendPlainText(dir.path() + "\n");
}
//QTemporaryFile
void sample7_3QDirFile::on_pushButton_54_clicked()
{showBtnInfo(sender());QTemporaryFile    aFile;aFile.setAutoRemove(true);aFile.open();ui->plainTextEdit->appendPlainText(aFile.fileName() + "\n");
}///--------QFileSystemWatcher类---------------
//开始监听,addPath()
void sample7_3QDirFile::on_pushButton_55_clicked()
{showBtnInfo(sender());ui->plainTextEdit->appendPlainText("监听目录:" + ui->editDir->text() + "\n");fileWatcher.addPath(ui->editDir->text());//添加监听目录fileWatcher.addPath(ui->editFile->text());//添加监听文件QObject::connect(&fileWatcher, &QFileSystemWatcher::directoryChanged,this, &sample7_3QDirFile::on_directoryChanged); //directoryChangedQObject::connect(&fileWatcher, &QFileSystemWatcher::fileChanged,this, &sample7_3QDirFile::on_fileChanged); //fileChanged
}
//停止监听,removePath()
void sample7_3QDirFile::on_pushButton_56_clicked()
{showBtnInfo(sender());ui->plainTextEdit->appendPlainText("停止监听目录:" + ui->editDir->text() + "\n");fileWatcher.removePath(ui->editDir->text());//fileWatcher.removePath(ui->editFile->text());//QObject::disconnect(&fileWatcher, &QFileSystemWatcher::directoryChanged,this, &sample7_3QDirFile::on_directoryChanged); //directoryChangedQObject::disconnect(&fileWatcher, &QFileSystemWatcher::fileChanged,this, &sample7_3QDirFile::on_fileChanged); //fileChanged
}
//显示监听目录,directories()
void sample7_3QDirFile::on_pushButton_57_clicked()
{showBtnInfo(sender());QStringList strList = fileWatcher.directories();for (int i = 0; i < strList.count(); i++){ui->plainTextEdit->appendPlainText(strList.at(i));}ui->plainTextEdit->appendPlainText("");}
//显示监听文件,files()
void sample7_3QDirFile::on_pushButton_58_clicked()
{showBtnInfo(sender());QStringList strList = fileWatcher.files();for (int i = 0; i < strList.count(); i++){ui->plainTextEdit->appendPlainText(strList.at(i));}ui->plainTextEdit->appendPlainText("");
}//打开文件
void sample7_3QDirFile::on_pushButton_59_clicked()
{QString curDir = QDir::currentPath();QString aFile = QFileDialog::getOpenFileName(this, "打开一个文件", curDir, "所有文件(*.*)");ui->editFile->setText(aFile);
}void sample7_3QDirFile::on_pushButton_60_clicked()
{QString curDir = QDir::currentPath();QString aDir = QFileDialog::getExistingDirectory(this, "选择一个目录", curDir, QFileDialog::ShowDirsOnly);ui->editDir->setText(aDir);
}void sample7_3QDirFile::on_pushButton_61_clicked()
{ui->plainTextEdit->clear();
}

相关文章:

Qt 文件目录操作

Qt 文件目录操作 QDir 类提供访问系统目录结构 QDir 类提供对目录结构及其内容的访问。QDir 用于操作路径名、访问有关路径和文件的信息以及操作底层文件系统。它还可以用于访问 Qt 的资源系统。 Qt 使用“/”作为通用目录分隔符&#xff0c;与“/”在 URL 中用作路径分隔符…...

Pandas 数据清洗

1.数据清洗定义 数据清洗是对一些没有用的数据进行处理的过程。很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况&#xff0c;如果要使数据分析更加准确&#xff0c;就需要对这些没有用的数据进行处理。 2.清洗空值 DataFrame.dropna(axis0, howany, threshN…...

IO学习笔记

当前需求&#xff0c;希望进行游戏可以保存游戏进度&#xff0c;可以将游戏的进度保存到一个文本文件&#xff0c;每一次打完游戏更新文本内容&#xff0c;下一次打游戏读取游戏进度&#xff0c;这里就涉及到两个知识IO流和File的知识。 File类 概述 java.io.File 类是文件…...

汇编练习-1

1、要求 练习要求引自《汇编语言-第4版》实验10.3(P209页) -编程&#xff0c;将data段中的数据&#xff0c;以10进制的形式显示出来 data segment dw 123,12666,1,8,3,38 data ends 2、实现代码(可惜没找到csdn对8086汇编显示方式) assume cs:codedata segmentdw 16 dup(0) ;除…...

初识二叉树( 二)

初识二叉树 二 实现链式结构二叉树前中后序遍历遍历规则代码实现 结点个数以及高度等层序遍历判断是否为完全二叉树 实现链式结构二叉树 ⽤链表来表示⼀棵二叉树&#xff0c;即用链来指示元素的逻辑关系。通常的方法是链表中每个结点由三个域组成&#xff0c;数据域和左右指针…...

AcWing1077-cnblog

问题背景 给定一个树形结构的图&#xff0c;每个节点代表一个地点&#xff0c;每个节点有一个守卫的代价。我们希望以最低的代价在树的节点上放置守卫&#xff0c;使得整棵树的所有节点都被监控。可以通过三种方式覆盖一个节点&#xff1a; 由父节点监控。由子节点监控。自己…...

五、SpringBoot3实战(1)

一、SpringBoot3介绍 1.1 SpringBoot3简介 SpringBoot版本&#xff1a;3.0.5 https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started.introducing-spring-boot 到目前为止&#xff0c;你已经学习了多种配置Spring程序的方式…...

练习LabVIEW第三十三题

学习目标&#xff1a; 刚学了LabVIEW&#xff0c;在网上找了些题&#xff0c;练习一下LabVIEW&#xff0c;有不对不好不足的地方欢迎指正&#xff01; 第三十三题&#xff1a; 用labview编写一个判断素数的程序 开始编写&#xff1a; LabVIEW判断素数&#xff0c;首先要搞…...

如何在服务器端对PDF和图像进行OCR处理

介绍 今天我想和大家分享一个我在研究技术资料时发现的很好玩的东西——Tesseract。这不仅仅是一个普通的库&#xff0c;而是一个用C语言编写的OCR神器&#xff0c;能够识别一大堆不同国家的语言。我一直在寻找能够处理各种文档的工具&#xff0c;而Tesseract就像是给了我一把…...

Windows 下实验视频降噪算法 MeshFlow 详细教程

MeshFlow视频降噪算法 Meshflow 视频降噪算法来自于 2017 年电子科技大学一篇高质量论文。 该论文提出了一个新的运动模型MeshFlow&#xff0c;它是一个空间平滑的稀疏运动场 (spatially smooth sparse motion field)&#xff0c;其运动矢量 (motion vectors) 仅在网格顶点 (m…...

Python入门:如何正确的控制Python异步并发量(制并发量的关键技巧与易错点解析)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 异步并发量控制 📒📝 Python异步并发简介📝 为什么要限制并发量🎈 资源管理🎈 服务稳定性📝 新手容易犯的错误🎈 忽略并发量限制🎈 错误设置并发量📝 设置并发量要注意的事情🎈 了解任务类型🎈 考虑系统资…...

qt QCheckBox详解

QCheckBox 是 Qt 框架中的一个控件&#xff0c;用于创建复选框&#xff0c;允许用户进行选择和取消选择。它通常用于表单、设置界面和任何需要用户选择的场景。 QCheckBox继承自QAbstractButton类&#xff0c;因此继承了按钮的特性。它表示一个复选框&#xff0c;用户可以通过…...

PAT甲级-1041 Be Unique

题目 题目大意 从一组数字中选出第一个唯一出现的数&#xff0c;输出该数。如果没有&#xff0c;则输出None。 思路 哈希的思想&#xff0c;将数值作为索引&#xff0c;对应该数值出现的次数&#xff0c;然后遍历数组即可。 注意第一个数字是指数字的个数&#xff0c;不是数…...

【jvm】如何设置堆内存大小

目录 1. 使用命令行参数设置2. idea中设置3. 注意事项 1. 使用命令行参数设置 1.在Java命令后添加-Xms和-Xmx参数。2.-Xms参数用于设置JVM的初始堆内存大小&#xff0c;等价于-XX:InitialHeapSize。3.-Xmx参数用于设置JVM的最大堆内存大小&#xff0c;等价于-XX:MaxHeapSize。…...

kernel源码分析 do_msgsnd read_msg

笔者分析的源码是v 5.11.22 链接&#xff1a;msg.c - ipc/msg.c - Linux source code v5.11.22 - Bootlin do_msgsnd static long do_msgsnd(int msqid, long mtype, void __user *mtext,size_t msgsz, int msgflg) {struct msg_queue *msq;struct msg_msg *msg;int err;str…...

掌握 CTE 技巧,实现连续日期和月份的 SQL 报表统计

在 SQL 查询中&#xff0c;报表统计往往涉及到特定时间段内的数据汇总&#xff0c;如每日、每月的销售数据等。然而&#xff0c;面对缺少数据的日期或月份&#xff0c;传统 SQL 查询可能会直接跳过这些日期&#xff0c;使得输出的报表在视觉上并不连续。本文将展示如何利用 CTE…...

【表格解决问题】EXCEL行数过多,WPS如何按逐行分别打印多个纸张中

1 问题描述 如图&#xff1a;我的表格行数太多了。打印在一张纸上有点不太好看 2 解决方式 Step01&#xff1a;先选中你需要打印的部分&#xff0c;找到【页面】->【打印区域】->【设置打印区域】 Step02&#xff1a;先选中一行&#xff0c;找到【插入分页符】 Step0…...

Maven讲解从基础到高级配置与实践

一、基础认知 1.1 Maven 的主要作用 Maven 主要是用来管理 Java 项目构建流程的工具&#xff0c;包括以下几个方面&#xff1a; 依赖管理&#xff1a;通过 POM.xml 文件管理项目的外部依赖库&#xff0c;不同版本的依赖包可以通过 Maven 中央仓库自动下载&#xff0c;减少了…...

Vue3组件式父子传值

下面是使用 <script setup> 语法的 Vue 3 组件之间传值的示例。 示例 1:使用 Props 和 Emits 父组件 <template><div><h1>父组件</h1><ChildComponent :message="parentMessage" @reply="handleReply" /><p>…...

网页自动化测试和爬虫:Selenium库入门与进阶

网页自动化测试和爬虫&#xff1a;Selenium库入门与进阶 在现代Web开发和数据分析中&#xff0c;自动化测试和数据采集成为了开发流程中的重要部分。Python 的 Selenium 库是一种强大的工具&#xff0c;不仅用于网页自动化测试&#xff0c;也在网页爬虫中得到了广泛的应用。本…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...

【UE5 C++】通过文件对话框获取选择文件的路径

目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 &#xff0c;这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器&#xff0c;右键点击 .uproject 文件&#xff0c;选择 "Generate Visual Studio project files"&#xff0c;重…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁

赛门铁克威胁猎手团队最新报告披露&#xff0c;数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据&#xff0c;严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能&#xff0c;但SEMR…...

Java多线程实现之Runnable接口深度解析

Java多线程实现之Runnable接口深度解析 一、Runnable接口概述1.1 接口定义1.2 与Thread类的关系1.3 使用Runnable接口的优势 二、Runnable接口的基本实现方式2.1 传统方式实现Runnable接口2.2 使用匿名内部类实现Runnable接口2.3 使用Lambda表达式实现Runnable接口 三、Runnabl…...

【Java】Ajax 技术详解

文章目录 1. Filter 过滤器1.1 Filter 概述1.2 Filter 快速入门开发步骤:1.3 Filter 执行流程1.4 Filter 拦截路径配置1.5 过滤器链2. Listener 监听器2.1 Listener 概述2.2 ServletContextListener3. Ajax 技术3.1 Ajax 概述3.2 Ajax 快速入门服务端实现:客户端实现:4. Axi…...