项目实战: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单元格内容进行新建文件夹, ... 
随机推荐
- Win10 下安装Ubuntu 21.04桌面版 双系统 并设置win10为默认启动系统 详细教程
			@ 目录 〇.写在前面 〇 - Plus:如何进入BIOS 〇 - Plus - Plus:U盘启动快捷键 一.磁盘分区:Win10划分未分配空间 二.下载Ubuntu 21.04镜像 三.安装U盘启 ... 
- 【CSS】计数器
			抄自B站Up主CodingStartup起码课 <!DOCTYPE html> <html lang="en"> <head> <meta ... 
- 20210501 序列,熟练剖分(tree),建造游乐园(play)
			考场 \(65+5+0\),并列 rk2 最高分 \(55+10+10\) T1:等比数列可以写作 \(q^kx\),发现 \(q\le1000\) 且有一档分为 \(a_i\le100\),想到 \ ... 
- NOIP模拟26「神炎皇·降雷皇·幻魔皇」
			T1:神炎皇 又是数学题,气死,根本不会. 首先考虑式子\(a+b=ab\),我们取\(a\)与\(b\)的\(gcd\):\(d\),那么式子就可以改写成: \[(a'+b')*d=a'b' ... 
- Codeforces 1365D Solve The Maze
			### 题目大意: 在一个 $n * m$ 的矩阵中,有空地.坏人.好人和墙.你可以将空地变成墙来堵住坏人.$(n, m)$为出口,是否存在一个方案使得矩阵中所有好人能够走到出口,而所有坏人不能通过出 ... 
- 交换机之vlan详解
			一.为什么需要VLAN 1.1.什么是VLAN? VLAN(Virtual LAN),翻译成中文是"虚拟局域网".LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算 ... 
- golang isPowerOfTwo判断是否是2的幂
			iota.go strconv包 func isPowerOfTwo(x int) bool { return x & (x -1) } 了解n&(n-1)的作用如下: n& ... 
- 2020ICPC沈阳站C题 Mean Streets of Gadgetzan
			大致题意 原题链接 翻译 \(有n个逻辑变量 请你分别对它们赋值 使其满足m个命题\) \(命题有四种格式:\) 单独数字x 表示第x个逻辑变量为真 ! + 数字x 表示第x个逻辑变量为假 若干个数字 ... 
- python+selenium之浏览器滚动条操作
			from selenium import webdriver import time #访问百度 driver=webdriver.Ie() driver.get("http://www.b ... 
- 简单易行的美化方案:Ubuntu 18.04 把启动过程中的紫色美化为黑色
			背景 给笔记本装了一个Ubuntu,嫌弃启动的颜色很丑:因此在网上找到了一些修改方法,集成为一个傻瓜脚本. 参考文档: https://askubuntu.com/questions/5065/how ... 
