项目实战:Qt文件改名工具 v1.2.0(支持递归检索,搜索:模糊匹配,前缀匹配,后缀匹配;重命名:模糊替换,前缀追加,后缀追加)
需求
在整理文件和一些其他头文件的时候,需要对其名称进行整理和修改,此工具很早就应该写了,创业后,非常忙,今天抽空写了一个顺便提供给学习。
工具和源码下载地址
本篇文章的应用包和源码包可在以下地方下载:
CSDN免积分下载地址:https://download.csdn.net/download/qq21497936/33864537
QQ群下载地址:1047134658(点击“文件”搜索“renameFile”,群内与博文同步更新)
Demo v1.2.0
1.window批量改名工具(理论上兼容ubuntu,arm,但是本司未测)
2.支持选择搜索的文件夹
3.支持搜索子文件夹
4.支持匹配方式:包含,前面匹配,后面匹配
5.支持修改方式:替换包含的内容,前面追加文本,后面追加文本
Demo v1.2.0演示


核心代码
RenameFileWidget.h
#ifndef RENAMEFILEWIDGET_H
#define RENAMEFILEWIDGET_H
/************************************************************\
* 控件名称: 文件改名小工具
* 控件描述:
* window批量改名工具(理论上兼容ubuntu,arm,但是本司未测)
* 控件功能:
* 1.支持选择搜索的文件夹
* 2.支持搜索子文件夹
* 3.支持匹配方式:包含,前面匹配,后面匹配
* 4.支持修改方式:替换包含的内容,前面追加文本,后面追加文本
* 著作权信息
* 作者:红胖子(AAA红模仿)
* 公司:长沙红胖子网络科技有限公司
* 网址:hpzwl.blog.csdn.net
* 联系方式:QQ(21497936) 微信(yangsir198808) 电话(15173255813)
* 版本信息
* 日期 版本 描述
* 2021年10月22日 v1.2.0 基本功能,样式
\************************************************************/
#include <QWidget>
#include <QAbstractButton>
#include <QStringListModel>
namespace Ui {
class RenameFileWidget;
}
class RenameFileWidget : public QWidget
{
Q_OBJECT
public:
explicit RenameFileWidget(QWidget *parent = 0);
~RenameFileWidget();
protected:
void initControls();
protected:
QStringList searchFile(QString searchDir, bool searchSubDir);
protected slots:
void slot_buttonClicked(QAbstractButton *pAbstractButton);
private slots:
void on_pushButton_browser_clicked();
void on_pushButton_reset_clicked();
void on_pushButton_search_clicked();
void on_pushButton_replace_clicked();
void on_checkBox_searchSubDir_clicked(bool checked);
private:
Ui::RenameFileWidget *ui;
private:
QStringList _fileList;
QStringListModel *_pModel;
};
#endif // RENAMEFILEWIDGET_H
RenameFileWidget.cpp
#include "RenameFileWidget.h"
#include "ui_RenameFileWidget.h"
#include <QFileDialog>
#include <QButtonGroup>
#include <QStringListModel>
#include <QDir>
#include <QDirIterator>
#include <QDebug>
#define LOG qDebug()<<__FILE__<<__LINE__
RenameFileWidget::RenameFileWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::RenameFileWidget),
_pModel(0)
{
ui->setupUi(this);
QString version = "v1.2.0";
setWindowTitle(QString("文件改名工具 %1 (长沙红胖子网络科技有限公司 QQ:21497936 微信:yangsir198808 公司网址: hpzwl.blog.csdn.net)")
.arg(version));
initControls();
}
RenameFileWidget::~RenameFileWidget()
{
delete ui;
}
void RenameFileWidget::initControls()
{
QButtonGroup *pButtonGroup = 0;
// 替换选择
pButtonGroup = new QButtonGroup(this);
pButtonGroup->addButton(ui->radioButton_replace);
pButtonGroup->addButton(ui->radioButton_replaceAddStart);
pButtonGroup->addButton(ui->radioButton_replaceAddEnd);
connect(pButtonGroup, SIGNAL(buttonClicked(QAbstractButton*)),
this, SLOT(slot_buttonClicked(QAbstractButton*)));
// 更新控件
_pModel = new QStringListModel;
_pModel->setStringList(_fileList);
ui->listView->setModel(_pModel);
// 初始化
ui->radioButton_replace->setChecked(true);
ui->lineEdit_replace->setEnabled(true);
ui->lineEdit_replaceAddHead->setEnabled(false);
ui->lineEdit_replaceAddEnd->setEnabled(false);
on_pushButton_reset_clicked();
}
void RenameFileWidget::slot_buttonClicked(QAbstractButton *pAbstractButton)
{
QRadioButton *pRadioButton = dynamic_cast<QRadioButton *>(pAbstractButton);
if(!pRadioButton)
{
LOG;
return;
}
if(pRadioButton == ui->radioButton_replace)
{
ui->lineEdit_replace->setEnabled(true);
ui->lineEdit_replaceAddHead->setEnabled(false);
ui->lineEdit_replaceAddEnd->setEnabled(false);
}else if(pRadioButton == ui->radioButton_replaceAddStart)
{
ui->lineEdit_replace->setEnabled(false);
ui->lineEdit_replaceAddHead->setEnabled(true);
ui->lineEdit_replaceAddEnd->setEnabled(false);
}else if(pRadioButton == ui->radioButton_replaceAddEnd)
{
ui->lineEdit_replace->setEnabled(false);
ui->lineEdit_replaceAddHead->setEnabled(false);
ui->lineEdit_replaceAddEnd->setEnabled(true);
}
}
void RenameFileWidget::on_pushButton_browser_clicked()
{
QString dir = ui->lineEdit_dirPath->text();
dir = dir.mid(0, dir.lastIndexOf("/"));
QString filePath = QFileDialog::getExistingDirectory(0, "选择搜索文件夹", dir);
if(filePath.isEmpty())
{
return;
}
ui->lineEdit_dirPath->setText(filePath);
}
void RenameFileWidget::on_pushButton_reset_clicked()
{
ui->lineEdit_contain->setText("");
ui->lineEdit_endWith->setText("");
ui->lineEdit_startWith->setText("");
ui->lineEdit_replace->setText("");
ui->lineEdit_replaceAddHead->setText("");
ui->lineEdit_replaceAddEnd->setText("");
ui->checkBox_contian->setChecked(true);
ui->checkBox_startWith->setChecked(false);
ui->checkBox_endWidth->setChecked(false);
ui->checkBox_searchSubDir->setChecked(true);
}
void RenameFileWidget::on_pushButton_search_clicked()
{
QStringList fileList = searchFile(ui->lineEdit_dirPath->text(), ui->checkBox_searchSubDir->isChecked());
_fileList.clear();
// 检测规则
if(ui->checkBox_contian->isChecked())
{
for(int index = 0; index < fileList.size(); index++)
{
if(fileList.at(index).contains(ui->lineEdit_contain->text()))
{
_fileList << fileList.at(index);
}
}
}
if(ui->checkBox_startWith->isChecked())
{
for(int index = 0; index < fileList.size(); index++)
{
if(fileList.at(index).startsWith(ui->lineEdit_startWith->text()))
{
_fileList << fileList.at(index);
}
}
}
if(ui->checkBox_endWidth->isChecked())
{
for(int index = 0; index < fileList.size(); index++)
{
if(fileList.at(index).endsWith(ui->lineEdit_endWith->text()))
{
_fileList << fileList.at(index);
}
}
}
_pModel->setStringList(_fileList);
ui->listView->setModel(_pModel);
ui->label_number->setText(QString("%1").arg(_fileList.size()));
}
QStringList RenameFileWidget::searchFile(QString searchDir, bool searchSubDir)
{
QStringList listFile;
if (searchDir.isEmpty())
{
return listFile;
}
// 迭代遍历指定目录下的文件,子目录也遍历
QDirIterator iter(searchDir, QDir::Files, searchSubDir ? QDirIterator::Subdirectories : QDirIterator::NoIteratorFlags);
while (iter.hasNext())
{
iter.next();
QFileInfo info = iter.fileInfo();
listFile << info.absoluteFilePath();
}
return listFile;
}
void RenameFileWidget::on_pushButton_replace_clicked()
{
for(int index = 0; index < _fileList.size(); index++)
{
QString fileName = _fileList.at(index);
QString dir = fileName.left(fileName.lastIndexOf("/"));
QString file = fileName.mid(fileName.lastIndexOf("/") + 1);
QString ext = "";
if(file.contains("."))
{
ext = file.mid(file.lastIndexOf(".") + 1);
file = file.left(file.lastIndexOf("."));
}
LOG << fileName << dir << file << ext;
if(ui->radioButton_replace->isChecked())
{
file.replace(ui->lineEdit_contain->text(), ui->lineEdit_replace->text());
QFile::rename(fileName, QString("%1/%2.%3").arg(dir).arg(file).arg(ext));
}else if(ui->radioButton_replaceAddStart->isChecked())
{
file.push_front(ui->lineEdit_replaceAddHead->text());
QFile::rename(fileName, QString("%1/%2.%3").arg(dir).arg(file).arg(ext));
}else if(ui->radioButton_replaceAddEnd->isChecked())
{
file.push_front(ui->lineEdit_replaceAddEnd->text());
QFile::rename(fileName, QString("%1/%2.%3").arg(dir).arg(file).arg(ext));
}
}
}
void RenameFileWidget::on_checkBox_searchSubDir_clicked(bool checked)
{
ui->label_subDir->setText(checked ? "是" : "否");
}
若该文为原创文章,转载请注明原文出处
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/120914785
项目实战:Qt文件改名工具 v1.2.0(支持递归检索,搜索:模糊匹配,前缀匹配,后缀匹配;重命名:模糊替换,前缀追加,后缀追加)的更多相关文章
- 日志文件清理工具V1.1
上次做完日志文件清理工具V1.0 的版本后,确实给自己的工作带来不少的方便.虽然只是一个小工具,代码也比较简单,但有用就是好东西.上次开发比较匆忙,有些细节没来得及完善,今天吃完晚饭,边看亚冠比赛边把 ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-5.HttpClient4.x工具获取使用
笔记 5.HttpClient4.x工具获取使用 简介:讲解httpClient4.x相关依赖,并封装基本方法. 1.加入依赖 <dependency> ...
- 【原创】日志文件清理工具V1.0
最近公司的系统服务器经常出现磁盘空间不足的情况,登陆服务器发现原来是公司的HR系统日志造成的(插个话题:我们公司的HR系统都实施两年多了还没上线,且不说软件功能如何,服务太TMD差劲了,更可气的是软件 ...
- vue.js+koa2项目实战(五)axios 及 vue2.0 子组件和父组件之间的传值
axios 用法: 1.安装 npm install axios --save-dev 2.导入 import axios from 'axios'; 3.使用 axios.post(url,para ...
- 今日头条、抖音、西瓜、火山、微视、陌陌等自媒体平台小视频批量下载工具v1.1.0(视频搬运福利)
前言 目前各大自媒体平台爆火,网络流量暴涨,各大自媒体平台的小视频为广大个广告主带来了如泉涌般的的视频流量,更给广大的自媒体小编带来了丰厚的利益回报,想要创做更多的自媒体内容着实不易,下面给广大的小视 ...
- Microsoft Office Access数据库或项目包含一个对文件“dao360.dll”版本5.0.的丢失的或损坏的引用。
今天使用 office 2007 access 打开 2003 的数据库中的表时候,提示这个错误.经过搜索,发现是没有 dao360.dll 的问题. 在 https://cn.dll-files.c ...
- C++ MFC 操作文件夹及属性(新建,删除[包含子文件[夹]],剪切,复制,重命名)
源文件:http://pan.baidu.com/s/169HCL 运行mfc缺失的动态连接库:http://pan.baidu.com/s/17pGlT 截图: 不足之处仅供参考,哈哈.
- C++ MFC 文件操作(新建,删除,剪切,复制,读数据,写数据,重命名)
源文件:http://pan.baidu.com/s/1ve0hV 这是运行mfc缺失的dll动态链接库:http://pan.baidu.com/s/17pGlT 哈哈,我也是初接触C++,基础的什 ...
- Python 写了一个批量生成文件夹和批量重命名的工具
Python 写了一个批量生成文件夹和批量重命名的工具 目录 Python 写了一个批量生成文件夹和批量重命名的工具 演示 功能 1. 可以读取excel内容,使用excel单元格内容进行新建文件夹, ...
随机推荐
- 关于Cloudfront能否接入NLB的讨论
之前讨论过四层应用 是无法通过七层负载负载均衡器转发流量的,因为ALB监听的是Http/s协议,TCP/UDP的请求到了ALB无法识别,ALB在第七层做判断,数据包只有四层,会无法判断转发的目标.相反 ...
- 性能测试必备命令(3)- lscpu
性能测试必备的 Linux 命令系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1819490.html 介绍 显示有关CPU架构的信息 ...
- jvm学习笔记:程序计数器
程序计数器(PC Register) The Java Virtual Machine can support many threads of execution at once (JLS §17). ...
- Junit5快速入门指南-3
Fixtures 是测试中非常重要的一部分.他们的主要目的是建立一个固定/已知的环境状态以确保 测试可重复并且按照预期的方式运行.比如在app测试中 基类@BeforeClass 配置初始化,初始化d ...
- tomcat快速发布备份脚本
一.说明 我们每次在tomcat中发布新war包,总是要经历[备份-停机-上传-启动]这几个部分,其中上传的环节和网速有极大相关性,要是网速很慢,那么整个发布的时间就会很长. 如果我们不借助于自动化发 ...
- java基础语法以及进制的转换
关键字 关键字: 被Java语言赋予特定含义的单词 关键字特点 组成关键字的字母全部小写 关键字注意事项 goto和const作为保留字存在,目前并不使用 类似IDEA这样的集成工具,针对关键字有特殊 ...
- 机器学习——集成学习(Bagging、Boosting、Stacking)
1 前言 集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新学习器.弱分类器(weak learner)指那些分类准确率只稍微好于随机猜测的分类器(errorrate < ...
- 1.26学习总结——css盒子模型
CSS 盒子模型(Box Model) 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用. CSS盒模型本质上是一个盒子,封装周围的H ...
- Java实现导入Excel文件
一.配置文件名称.路径.内容: <bean id="multipartResolver" class="org.springframework.web.multip ...
- 【PHP数据结构】插入类排序:简单插入、希尔排序
总算进入我们的排序相关算法的学习了.相信不管是系统学习过的还是没有系统学习过算法的朋友都会听说过许多非常出名的排序算法,当然,我们今天入门的内容并不是直接先从最常见的那个算法说起,而是按照一定的规则一 ...