项目实战:Qt文件改名工具 v1.2.0(支持递归检索,搜索:模糊匹配,前缀匹配,后缀匹配;重命名:模糊替换,前缀追加,后缀追加

简介: 项目实战: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 ? "是" : "否");
}



相关文章
|
3月前
【qt】如何读取文件并拆分信息?
【qt】如何读取文件并拆分信息?
33 0
|
4月前
|
C++
基于QT实现的拷贝文件以及实时进度条(简易版)
1.基于按钮或者菜单栏的槽里去写逻辑函数(我这边用的是菜单栏),ui实现的进度条 2.创建两个对象,一个是源文件,一个是目标文件分别用getopenfileName、getsavefileName函数即可。 3.利用QFile类去实现对两个文件的创建,因为QFile中可以获取文件的属性已经读写等。 4.循环的去读取源文件中的数据,然后写入目标文件
488 6
|
3月前
|
存储 算法 C++
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
|
3月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
696 4
|
3月前
|
XML 开发框架 API
【Qt 学习笔记】QWidget的windowTitle属性 | windowIcon属性 | qrc文件机制
【Qt 学习笔记】QWidget的windowTitle属性 | windowIcon属性 | qrc文件机制
158 1
|
3月前
QT 软件打包为一个单独可执行.exe文件流程
QT 软件打包为一个单独可执行.exe文件流程
715 0
|
3月前
|
安全 C++ Windows
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
Windows下C++使用gRPC(Qt和VS,含文件包和使用方法)
|
5月前
Qt颜色、文件、字体对话框
Qt颜色、文件、字体对话框
|
6月前
|
Windows
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
Qt 目录操作(QDir 类)及展示系统文件实战 & QFilelnfo 类介绍和获取文件属性项目实战
|
6月前
|
XML 数据可视化 程序员
Qt 中的项目文件解析和命名规范
Qt 中的项目文件解析和命名规范