项目实战: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单元格内容进行新建文件夹, ...
随机推荐
- android activity pass data to accessibilityservice 数据传递
不同类型的 service 传递数据的方式不同,accessibilityservice 运行在独立进程,且被系统接管,比较特别 在 AccessibilityService 的 onCreate 内 ...
- 稚晖君-最小linux服务器运行 nginx + netcore
华为天才少年, B站科技大神,稚晖君(自称野生钢铁侠),多少科技爱好者拜服在他的全方位技术栈 今天我们就去入手一个他的量产产品 号称最小linux电脑 的"夸克" 到手之后,我们马 ...
- Flask(6)- debug 模式
使用 Flask 开发过程中存在两个常见的问题 当 Flask 程序出错时,没有提示错误的详细信息 修改 Flask 源代码后需要重启 Flask 程序 这两个问题非常的影响开发效率,因此 Flask ...
- MongoDB(2)- 安装 MongoDB
MacOS 安装 MongoDB 博主目前都用 mac 电脑练习,所以这里重点讲 MacOS 安装方式 系统要求 MongoDB 4.4 社区版支持 macOS 10.13 或更高版本 安装 Home ...
- 110_SSM框架
目录 需求分析->功能设计->数据库设计 环境要求 环境 要求 数据库环境 基本环境搭建 创建maven项目 pom.xml添加依赖,添加资源导出 idea连接数据库 提交项目到Git 创 ...
- shell脚本中的多行注释
shell 中注释的使用方法 1. 单行注释 单行注释最为常见,它是通过一个'#'来实现的.注意shell脚本的最开始部分"#!/bin/bash"的#号不是用来注释的. 2. 多 ...
- GIT:创建、查看分支命令(git branch -vv)
在开发过程中一般会用到Git进行版本管理,创建查看分支并与远程仓库交互是非常常见的操作. branch分支 是指在开发主线中分离出来的,做进一步开发而不影响到原来的主线. Git存储的不是一系列的更改 ...
- (9)java Spring Cloud+Spring boot+mybatis企业快速开发架构之SpringCloud-搭建Eureka服务注册中心
首先创建一个 Maven 项目,取名为 eureka-server,在 pom.xml 中配置 Eureka 的依赖信息,代码如下所示. <!-- Spring Boot --> &l ...
- ElasticSearch集成SpringData史上最全查询教程
1.简单介绍 springboot 使用springdata操作es,ElasticsearchRepository使用QueryBuilder构造查询条件 2.集成es //maven集成 < ...
- CSP-J 2021 游记
今年是本人第一次参加CSP组的竞赛. Day 0 晚上复习了几套初赛试卷,做到晚上十点多结束.其实暑假已经做过不少了. Day 1 早上继续复习noip历年真题,在洛谷有题上面自己做题,一向只能考十几 ...