Qt文件和目录相关操作
1.相关说明
QCoreApplication类、QFile类、QDir、QTemporaryDir类、QTemporaryFile类、QFileSystemWatcher类的相关函数
2.相关界面
3.相关代码
#include "dialog.h"
#include "ui_dialog.h"
#include <QFileDialog>
#include <QTemporaryDir>
#include <QTemporaryFile>
#include <QFileSystemWatcher>Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog)
{ui->setupUi(this);fileWatcher = NULL;
}Dialog::~Dialog()
{delete ui;
}// 打开一个文件
void Dialog::on_btnOpenFile_clicked()
{QString curDir = QCoreApplication::applicationDirPath();QString aFile = QFileDialog::getOpenFileName(this, "打开一个文件", curDir, "(*.cpp *.h *.c);;(*.*)");ui->lineEditFile->setText(aFile);
}
// 打开一个目录
void Dialog::on_btnOpenDir_clicked()
{QString curDir = QCoreApplication::applicationDirPath();QString aDir = QFileDialog::getExistingDirectory(this, "选择一个目录", curDir);ui->lineEditDir->setText(aDir);
}
// 清除文本框
void Dialog::on_btnClear_clicked()
{ui->plainTextEdit->clear();
}void Dialog::showBtnInfo(QObject *btn)
{QPushButton *theBtn = static_cast<QPushButton*>(btn);ui->plainTextEdit->appendPlainText(theBtn->text());ui->plainTextEdit->appendPlainText(theBtn->toolTip()+":");
}// applicationDirPath()
void Dialog::on_btnApplicationDirPath_clicked()
{showBtnInfo(sender());QString str = QCoreApplication::applicationDirPath();ui->plainTextEdit->appendPlainText(str);
}
// applicationFilePath()
void Dialog::on_btnApplicationFilePath_clicked()
{showBtnInfo(sender());QString str = QCoreApplication::applicationFilePath();ui->plainTextEdit->appendPlainText(str);
}
// applicationName()
void Dialog::on_btnApplicationName_clicked()
{showBtnInfo(sender());// QCoreApplication::setApplicationName("My App");QString str = QCoreApplication::applicationName();ui->plainTextEdit->appendPlainText(str);
}
// setApplicationName(QString)
void Dialog::on_btnSetApplicationName_clicked()
{showBtnInfo(sender());QCoreApplication::setApplicationName("My App");QString str = QCoreApplication::applicationName();ui->plainTextEdit->appendPlainText(str);
}
// libraryPaths()
void Dialog::on_btnLibraryPaths_clicked()
{showBtnInfo(sender());QStringList paths = QCoreApplication::libraryPaths();for(auto &path : paths){ui->plainTextEdit->appendPlainText(path);}
}
// organizationName()
void Dialog::on_btnOrganiazationName_clicked()
{showBtnInfo(sender());QCoreApplication::setOrganizationName("My Organization");QString orgName = QCoreApplication::organizationName();ui->plainTextEdit->appendPlainText(orgName);
}
// exit()
void Dialog::on_btnExit_clicked()
{QCoreApplication::exit();
}
// QFile::copy
void Dialog::on_btnQFileCopy_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);QString newFile = fileInfo.path()+"/"+fileInfo.baseName()+"--副本."+fileInfo.suffix();QFile::copy(sourceFile, newFile);ui->plainTextEdit->appendPlainText("源文件:"+sourceFile);ui->plainTextEdit->appendPlainText("副本:"+newFile);
}
// QFile::exists
void Dialog::on_btnQFileExists_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();if(QFile::exists(sourceFile)){ui->plainTextEdit->appendPlainText(sourceFile + ":存在");} else {ui->plainTextEdit->appendPlainText(sourceFile + ":不存在");}}
// QFile::remove
void Dialog::on_btnRemove_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();if(QFile::remove(sourceFile)){ui->plainTextEdit->appendPlainText("remove "+sourceFile+" 成功");} else {ui->plainTextEdit->appendPlainText("remove "+sourceFile+" 失败");}
}
// QFile::rename
void Dialog::on_btnQFileRename_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);QString newFile = fileInfo.path()+"/"+fileInfo.baseName()+"--新名称."+fileInfo.suffix();if(QFile::rename(sourceFile, newFile)){ui->plainTextEdit->appendPlainText("旧名称:"+sourceFile);ui->plainTextEdit->appendPlainText("新名称:"+newFile);} else {ui->plainTextEdit->appendPlainText("修改 "+sourceFile+" 失败");}
}
// QFile::moveToTrash
void Dialog::on_btnQFileMoveToTrash_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();if(QFile::exists(sourceFile) && QFile::moveToTrash(sourceFile)){ui->plainTextEdit->appendPlainText("删除文件到垃圾箱:"+sourceFile);} else {ui->plainTextEdit->appendPlainText("文件不存在");}
}
// file.copy
void Dialog::on_btnCopy_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);QString newFile = fileInfo.path()+"/"+fileInfo.baseName()+"--副本."+fileInfo.suffix();QFile file(sourceFile);// QFile::copy(sourceFile, newFile);if(file.copy(newFile)){ui->plainTextEdit->appendPlainText("源文件:"+sourceFile);ui->plainTextEdit->appendPlainText("副本:"+newFile);} else {ui->plainTextEdit->appendPlainText("复制文件失败:"+sourceFile);}}
// file.exists
void Dialog::on_btnExists_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFile file(sourceFile);if(file.exists()){ui->plainTextEdit->appendPlainText(sourceFile + ":存在");} else {ui->plainTextEdit->appendPlainText(sourceFile + ":不存在");}
}
// file.remove
void Dialog::on_btnRemove_2_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFile file(sourceFile);if(file.remove()){ui->plainTextEdit->appendPlainText("remove "+sourceFile+" 成功");} else {ui->plainTextEdit->appendPlainText("remove "+sourceFile+" 失败");}
}
// file.rename
void Dialog::on_btnRename_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);QString newFile = fileInfo.path()+"/"+fileInfo.baseName()+"--新名称."+fileInfo.suffix();QFile file(sourceFile);if(file.rename(newFile)){ui->plainTextEdit->appendPlainText("旧名称:"+sourceFile);ui->plainTextEdit->appendPlainText("新名称:"+newFile);} else {ui->plainTextEdit->appendPlainText("修改 "+sourceFile+" 失败");}
}
// file.moveToTrash
void Dialog::on_btnMoveToTrash_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFile file(sourceFile);if(file.exists() && file.moveToTrash()){ui->plainTextEdit->appendPlainText("删除文件到垃圾箱:"+sourceFile);} else {ui->plainTextEdit->appendPlainText("文件不存在");}
}
// absoluteFilePath()
void Dialog::on_btnAbsoluteFilePath_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);QString absfilePath = fileInfo.absoluteFilePath();ui->plainTextEdit->appendPlainText(absfilePath);
}
// absolutePath()
void Dialog::on_btnAbsolutePath_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);QString absfilePath = fileInfo.absolutePath();ui->plainTextEdit->appendPlainText(absfilePath);
}
// fileInfo.fileName()
void Dialog::on_btnFileName_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);QString fileName = fileInfo.fileName();ui->plainTextEdit->appendPlainText(fileName);
}
// fileInfo.filePath()
void Dialog::on_btnFilePath_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);QString filePath = fileInfo.filePath();ui->plainTextEdit->appendPlainText(filePath);
}
// fileInfo.size()
void Dialog::on_btnSize_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);QString fileSize = QString::number(fileInfo.size());ui->plainTextEdit->appendPlainText(fileSize+"Bytes");
}
// fileInfo.path()
void Dialog::on_btnPath_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);QString path = fileInfo.path();ui->plainTextEdit->appendPlainText(path);
}
// fileInfo.baseName()
void Dialog::on_btnBaseName_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);QString baseName = fileInfo.baseName();ui->plainTextEdit->appendPlainText(baseName);
}
// fileInfo.completeBaseName()
void Dialog::on_btnCompleteBaseName_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);QString completeBaseName = fileInfo.completeBaseName();ui->plainTextEdit->appendPlainText(completeBaseName);
}
// fileInfo.suffix()
void Dialog::on_btnSuffix_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);QString suffix = fileInfo.suffix();ui->plainTextEdit->appendPlainText(suffix);
}
// fileInfo.completeSuffix()
void Dialog::on_btnCompleteSuffix_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);QString completeSuffix = fileInfo.completeSuffix();ui->plainTextEdit->appendPlainText(completeSuffix);
}
// fileInfo.isDir()
void Dialog::on_btnIsDir_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);if(fileInfo.isDir()){ui->plainTextEdit->appendPlainText("目录");} else {ui->plainTextEdit->appendPlainText("非目录");}
}
// fileInfo.isFile()
void Dialog::on_btnIsFile_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);if(fileInfo.isFile()){ui->plainTextEdit->appendPlainText("文件");} else {ui->plainTextEdit->appendPlainText("非文件");}
}
// fileInfo.isExecutable()
void Dialog::on_btnIsExecutable_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);if(fileInfo.isExecutable()){ui->plainTextEdit->appendPlainText("执行文件");} else {ui->plainTextEdit->appendPlainText("非执行文件");}
}
// fileInfo.birthTime()
void Dialog::on_btnBirthTime_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);if(fileInfo.exists()){ui->plainTextEdit->appendPlainText("创建时间:"+fileInfo.birthTime().toString("yyyy-MM-dd hh:mm:ss"));}
}
// fileInfo.lastModified()
void Dialog::on_btnLastModified_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);if(fileInfo.exists()){ui->plainTextEdit->appendPlainText("最后修改时间:"+fileInfo.lastModified().toString("yyyy-MM-dd hh:mm:ss"));}
}
// fileInfo.lastRead()
void Dialog::on_btnLastRead_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);if(fileInfo.exists()){ui->plainTextEdit->appendPlainText("最后读取时间:"+fileInfo.lastRead().toString("yyyy-MM-dd hh:mm:ss"));}
}
// QFileInfo::exists(sourceFile)
void Dialog::on_btnStaticExists_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();if(QFileInfo::exists(sourceFile)){ui->plainTextEdit->appendPlainText("文件存在");} else {ui->plainTextEdit->appendPlainText("文件不存在");}
}
// fileInfo.exists()
void Dialog::on_btnDynamicExists_clicked()
{showBtnInfo(sender());QString sourceFile = ui->lineEditFile->text();QFileInfo fileInfo(sourceFile);if(fileInfo.exists()){ui->plainTextEdit->appendPlainText("文件存在");} else {ui->plainTextEdit->appendPlainText("文件不存在");}
}
// QDir::tempPath()
void Dialog::on_btnTempPath_clicked()
{showBtnInfo(sender());ui->plainTextEdit->appendPlainText("tempPath:"+QDir::tempPath());
}
// QDir::rootPath()
void Dialog::on_btnRootPath_clicked()
{showBtnInfo(sender());ui->plainTextEdit->appendPlainText("rootPath:"+QDir::rootPath());
}
// QDir::homePath()
void Dialog::on_btnHomePath_clicked()
{showBtnInfo(sender());ui->plainTextEdit->appendPlainText("homePath:"+QDir::homePath());
}
// QDir::drives()
void Dialog::on_btnDrives_clicked()
{showBtnInfo(sender());QFileInfoList filelist = QDir::drives();for(auto &fileInfo : filelist){ui->plainTextEdit->appendPlainText(fileInfo.path());}
}
// QDir::currentPath()
void Dialog::on_btnCurrentPath_clicked()
{showBtnInfo(sender());ui->plainTextEdit->appendPlainText("currentPath:"+QDir::currentPath());
}// QDir::setCurrent(ui->lineEditDir->text())
void Dialog::on_btnSetCurrent_clicked()
{showBtnInfo(sender());QDir::setCurrent(ui->lineEditDir->text());ui->plainTextEdit->appendPlainText("currentPath:"+QDir::currentPath());
}
// dir.mkdir(subDir)
void Dialog::on_btnMkdir_clicked()
{showBtnInfo(sender());QString subDir = "subdir";QDir dir(ui->lineEditDir->text());if(dir.mkdir(subDir)){ui->plainTextEdit->appendPlainText("创建成功:"+subDir);} else {ui->plainTextEdit->appendPlainText("创建失败:"+subDir);}
}
// dir.rmdir(subDir)
void Dialog::on_btnRmdir_clicked()
{showBtnInfo(sender());QString subDir = "subdir";QDir dir(ui->lineEditDir->text());if(dir.rmdir(subDir)){ui->plainTextEdit->appendPlainText("删除成功:"+subDir);} else {ui->plainTextEdit->appendPlainText("删除失败:"+subDir);}
}
// dir.remove(fileName)
void Dialog::on_btnRemove_3_clicked()
{showBtnInfo(sender());QString fileName = ui->lineEditFile->text();QDir dir(ui->lineEditDir->text());if(dir.remove(fileName)){ui->plainTextEdit->appendPlainText("删除成功:"+fileName);} else {ui->plainTextEdit->appendPlainText("删除失败:"+fileName);}
}
// dir.rename(fileName, newFile)
void Dialog::on_btnDirRename_clicked()
{showBtnInfo(sender());QString fileName = ui->lineEditFile->text();QFileInfo fileInfo(fileName);QDir dir(ui->lineEditDir->text());QString newFile = fileInfo.path()+"/"+fileInfo.baseName()+".XYZ";if(dir.rename(fileName, newFile)){ui->plainTextEdit->appendPlainText("源文件:"+fileName);ui->plainTextEdit->appendPlainText("修改后的文件:"+newFile);} else {ui->plainTextEdit->appendPlainText("修改失败");}
}
// lastDir.setPath(aDir)
void Dialog::on_btnSetPath_clicked()
{showBtnInfo(sender());QString curDir = QDir::currentPath();QDir lastDir(curDir);ui->plainTextEdit->appendPlainText("当前目录:"+lastDir.absolutePath());QString aDir = QFileDialog::getExistingDirectory(this, "选择一个目录",curDir);if(aDir.isEmpty()){return;}ui->lineEditDir->setText(aDir);lastDir.setPath(aDir);ui->plainTextEdit->appendPlainText("选择后的目录:"+lastDir.absolutePath());
}
// aDir.removeRecursively()
void Dialog::on_btnRemoveRecursively_clicked()
{showBtnInfo(sender());QDir aDir(ui->lineEditDir->text());if(aDir.removeRecursively()){ui->plainTextEdit->appendPlainText("递归删除成功");} else {ui->plainTextEdit->appendPlainText("递归删除失败");}
}
// aDir.absoluteFilePath(ui->lineEditFile->text())
void Dialog::on_btnAbsoluteFilePath_2_clicked()
{showBtnInfo(sender());QDir aDir(ui->lineEditDir->text());QString str = aDir.absoluteFilePath(ui->lineEditFile->text());ui->plainTextEdit->appendPlainText(str);
}
// aDir.absolutePath()
void Dialog::on_btnDirAbsolutePath_clicked()
{showBtnInfo(sender());QDir aDir(ui->lineEditDir->text());ui->plainTextEdit->appendPlainText(aDir.absolutePath());
}
// aDir.canonicalPath()
void Dialog::on_btnCanonicalPath_clicked()
{showBtnInfo(sender());QDir aDir(ui->lineEditDir->text());ui->plainTextEdit->appendPlainText(aDir.canonicalPath());
}
// aDir.filePath(ui->lineEditFile->text())
void Dialog::on_btnDirFilePath_clicked()
{showBtnInfo(sender());QDir aDir(ui->lineEditDir->text());QString filePath = aDir.filePath(ui->lineEditFile->text());ui->plainTextEdit->appendPlainText(filePath);
}
// aDir.path()
void Dialog::on_btnDirPath_clicked()
{showBtnInfo(sender());QDir aDir(ui->lineEditDir->text());ui->plainTextEdit->appendPlainText(aDir.path());
}
// aDir.dirName()
void Dialog::on_btnDirName_clicked()
{showBtnInfo(sender());QDir aDir(ui->lineEditDir->text());ui->plainTextEdit->appendPlainText(aDir.dirName());
}
// aDir.exists()
void Dialog::on_btnDirExists_clicked()
{showBtnInfo(sender());QDir aDir(ui->lineEditDir->text());if(aDir.exists()){ui->plainTextEdit->appendPlainText("存在:"+aDir.dirName());} else {ui->plainTextEdit->appendPlainText("不存在:"+aDir.dirName());}}
// aDir.isEmpty()
void Dialog::on_btnDirIsEmpty_clicked()
{showBtnInfo(sender());QDir aDir(ui->lineEditDir->text());if(aDir.isEmpty()){ui->plainTextEdit->appendPlainText("空文件夹:"+aDir.dirName());} else {ui->plainTextEdit->appendPlainText("非空文件夹:"+aDir.dirName());}
}
// aDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)
void Dialog::on_btnDirEntryList_clicked()
{showBtnInfo(sender());QDir aDir(ui->lineEditDir->text());QStringList strList = aDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);ui->plainTextEdit->appendPlainText(aDir.dirName()+"目录下的所有目录:");for(QString &dir : strList){ui->plainTextEdit->appendPlainText(dir);}
}
// aDir.entryList(QDir::Files)
void Dialog::on_btnFileEntryList_clicked()
{showBtnInfo(sender());QDir aDir(ui->lineEditDir->text());QStringList strList = aDir.entryList(QDir::Files);ui->plainTextEdit->appendPlainText(aDir.dirName()+"目录下的所有文件:");for(QString &dir : strList){ui->plainTextEdit->appendPlainText(dir);}
}
// 1.在系统临时目录下创建临时文件夹
void Dialog::on_btnCreateTmpDir_clicked()
{showBtnInfo(sender());ui->plainTextEdit->appendPlainText("QDir::tempPath()="+QDir::tempPath());QTemporaryDir dir;dir.setAutoRemove(true);ui->plainTextEdit->appendPlainText(dir.path());
}
// 1.在系统临时目录下创建临时文件
void Dialog::on_btnCreateTmpFile_clicked()
{showBtnInfo(sender());ui->plainTextEdit->appendPlainText("QDir::tempPath()="+QDir::tempPath());QTemporaryFile aFile;aFile.setAutoRemove(true);aFile.open();ui->plainTextEdit->appendPlainText(aFile.fileName());aFile.close();
}
// 2.在指定目录下创建临时文件夹
void Dialog::on_btnCreateTmpDir_2_clicked()
{showBtnInfo(sender());QString specDir = ui->lineEditDir->text();ui->plainTextEdit->appendPlainText("指定目录="+specDir);QTemporaryDir dir(specDir + "/TempDir_XXX");dir.setAutoRemove(false);ui->plainTextEdit->appendPlainText(dir.path());
}
// 2.在指定目录下创建临时文件
void Dialog::on_btnCreateTmpFile_2_clicked()
{showBtnInfo(sender());QString specDir = ui->lineEditDir->text();ui->plainTextEdit->appendPlainText("指定目录="+specDir);QTemporaryFile aFile(specDir+"/TempFile_XXX");aFile.setAutoRemove(false);aFile.open();ui->plainTextEdit->appendPlainText(aFile.fileName());aFile.close();
}
// 3.在当前目录下创建临时文件夹
void Dialog::on_btnCreateCurTmpDir_clicked()
{showBtnInfo(sender());ui->plainTextEdit->appendPlainText("当前路径="+QDir::currentPath());QTemporaryDir dir("SubDir_XXX");dir.setAutoRemove(false);ui->plainTextEdit->appendPlainText(dir.path());
}
// 3.在当前目录下创建临时文件
void Dialog::on_btnCreateCurTmpFile_clicked()
{showBtnInfo(sender());ui->plainTextEdit->appendPlainText("当前路径="+QDir::currentPath());QTemporaryFile aFile("CurTempFile_XXX.temp");aFile.setAutoRemove(false);aFile.open();ui->plainTextEdit->appendPlainText(aFile.fileName());aFile.close();
}
void Dialog::do_directoryChanged(const QString &path)
{ui->plainTextEdit->appendPlainText(path + "目录发生了变化");
}void Dialog::do_fileChanged(const QString &path)
{ui->plainTextEdit->appendPlainText(path+"文件发生了变化");
}
// addPath()并开始监视
void Dialog::on_btnAddPathWatcher_clicked()
{showBtnInfo(sender());if(fileWatcher == NULL){fileWatcher = new QFileSystemWatcher(this);}fileWatcher->addPath(ui->lineEditDir->text());fileWatcher->addPath(ui->lineEditFile->text());connect(fileWatcher, &QFileSystemWatcher::directoryChanged, this, &Dialog::do_directoryChanged);connect(fileWatcher, &QFileSystemWatcher::fileChanged, this, &Dialog::do_fileChanged);
}
// removePath()并停止监视
void Dialog::on_btnRemovePathWatcher_clicked()
{showBtnInfo(sender());fileWatcher->removePath(ui->lineEditDir->text());fileWatcher->removePath(ui->lineEditFile->text());disconnect(fileWatcher);
}
// directories()
void Dialog::on_btnDirectories_clicked()
{showBtnInfo(sender());for(auto &item : fileWatcher->directories()){ui->plainTextEdit->appendPlainText(item);}
}
// files()
void Dialog::on_btnFiles_clicked()
{showBtnInfo(sender());for(QString &item : fileWatcher->files()){ui->plainTextEdit->appendPlainText(item);}
}
相关文章:

Qt文件和目录相关操作
1.相关说明 QCoreApplication类、QFile类、QDir、QTemporaryDir类、QTemporaryFile类、QFileSystemWatcher类的相关函数 2.相关界面 3.相关代码 #include "dialog.h" #include "ui_dialog.h" #include <QFileDialog> #include <QTemporaryDir>…...

递归、搜索与回溯算法(专题一:递归)
往期文章(希望小伙伴们在看这篇文章之前,看一下往期文章) (1)递归、搜索与回溯算法(专题零:解释回溯算法中涉及到的名词)【回溯算法入门必看】-CSDN博客 接下来我会用几道题&#…...

element-ui 打包流程源码解析(下)
目录 目录结构和使用1,npm 安装1.1,完整引入1.2,按需引入 2,CDN3,国际化 接上文:element-ui 打包流程源码解析(上) 文章中提到的【上文】都指它 ↑ 目录结构和使用 我们从使用方式来…...

ChatGPT给出的前端面试考点(Vue.js)
ChatGPT给出的前端面试考点(Vue.js) 答案 1. Vue.js是什么?它的主要特点是什么? Vue.js是一个渐进式JavaScript框架,用于构建用户界面。它的主要特点包括: 数据绑定:Vue.js使用双向数据绑定&…...

ChatGPT 商业提示词攻略书
原文:ChatGPT Business Prompt Playbook 译者:飞龙 协议:CC BY-NC-SA 4.0 一、书系介绍 人工智能发展迅速。非常迅速。 所以我希望你做两件事: (1) 在 Twitter 上关注我:iamkylebalmer (2) 订阅我的免费电子邮件通…...

Notepad++运行C语言输出乱码
方法一:编码-编码字符集-中文-GB2312 这时原程序中文会变成乱码,我是重新输入中文 重新编译执行即可 缺陷:重开一个程序有中文还是会显示乱码,需要重新设置编码,比较麻烦 方法二:设置-首选项-新建-右侧编…...

深入解析 Java 方法引用:Lambda 表达式的进化之路
前言 方法引用是 Java 8 提供的一种新特性,它允许我们更简洁地传递现有方法作为参数。这项特性实际上是对 Lambda 表达式的一种补充,通过方法引用,我们可以直接引用现有方法,而无需编写完整的Lambda表达式。最近在使用方法引用的…...
MySQL作业 (3)多表查询
多表查询 1.创建student和score表2.为student表和score表增加记录3.查询student表的所有记录4.查询student表的第2条到4条记录5.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息6.…...
ConcurrentHashMap和HashMap的区别
什么是HashMap (1)HashMap 是基于 Map 接口的非同步实现,线程不安全,是为了快速存取而设计的;它采用 key-value 键值对的形式存放元素(并封装成 Node 对象),允许使用 null 键和 nul…...

MCM备赛笔记——图论模型
Key Concept 图论是数学的一个分支,专注于研究图的性质和图之间的关系。在图论中,图是由顶点(或节点)以及连接这些顶点的边(或弧)组成的。图论的模型广泛应用于计算机科学、通信网络、社会网络、生物信息学…...

算法笔记(动态规划入门题)
1.找零钱 int coinChange(int* coins, int coinsSize, int amount) {int dp[amount 1];memset(dp,-1,sizeof(dp));dp[0] 0;for (int i 1; i < amount; i)for (int j 0; j < coinsSize; j)if (coins[j] < i && dp[i - coins[j]] ! -1)if (dp[i] -1 || dp[…...
开发实践_阶段三
编写一个告知APP。 需求: 1.登录、注册 2.发布定向讯息:检测是否登录,是则向用户或用户组发布 ”名称 时间“ ;否则提示登录 3.讯息接收:检测是否登录,是则查看收到信息(未读数)…...
codegeex和通义灵码辅助编程——以及通义灵码无法登陆的bug解决
通义的速度更快,延迟低,150ms。 codegeex速度慢些,延迟较高,500ms。 个人评价:延迟低的会很好地改善使用体验,所以通义加分。 但是整体功能上还是codegeex强一些,可以选中代码进行对话…...

Android14之DefaultKeyedVector实现(一百八十二)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...

银河麒麟操作系统 v10 中离线安装 Docker
银河麒麟操作系统 v10 中离线安装 Docker 1. 查看系统版本2. 查看 Linux 内核版本(3.10以上)3. 查看 iptabls 版本(1.4以上)4. 判断处理器架构5. 离线下载 Docker 安装包6. 移动解压出来的二进制文件到 /usr/bin 目录中7. 配置 Do…...
如何系统的学习Python
学习 Python 的时候,可以按照以下步骤进行系统学习: 学习 Python 基础知识:首先了解 Python 的基础语法、数据类型、变量和运算符等基本概念。可以通过阅读《Python编程从入门到实践》等经典教材来建立基础。也可以通过翻阅Python官方文档来进…...

Java并发基础:一文讲清util.concurrent包的作用
java.util.concurrent包是 Java 中用于并发编程的重要工具集,提供了线程池、原子变量、并发集合、同步工具类、阻塞队列等一系列高级并发工具类,使用这些工具类可以极大地简化并发编程的难度,减少出错的可能性,提高程序的效率和可…...

C++PythonC# 三语言OpenCV从零开发(2):教程选择
文章目录 相关专栏前言视频教学和官方文档视频教程OpenCV 官方教程最终选择我的最终选择 相关专栏 C&Python&Csharp in OpenCV 前言 OpenCV 有官方的教程和简单的视频教程: OpenCV 官方教程 B站也有相关的视频教学 OpenCV4 C 快速入门视频30讲 - 系列合集 …...

【嘉立创EDA-PCB设计指南】3.网络表概念解读+板框绘制
前言:本文对网络表概念解读板框绘制(确定PCB板子轮廓) 网络表概念解读 在本专栏的上一篇文章【嘉立创EDA-PCB设计指南】2,将设计的原理图转为了PCB,在PCB界面下出现了所有的封装,以及所有的飞线属性&…...

nodejs前端项目的CI/CD实现(二)jenkins的容器化部署
一、背景 docker安装jenkins,可能你会反问,这太简单了,有什么好讲的。 我最近就接手了一个打包项目,它是一个nodejs的前端项目,jenkins已在容器里部署且运行OK。 但是,前端组很追求新技术,不…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...