zoukankan      html  css  js  c++  java
  • 项目实战: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

  • 相关阅读:
    Python实战之SocketServer模块
    CentOS出错You don't have permission to access on this server
    系统瓶颈分析
    loadrunner支持https协议的操作方法-经验总结
    Loadrunner上传与下载文件脚本
    Loadrunner之HTTP接口测试脚本实例
    Android界面性能调优手册
    Loadrunner11.0 录制手机App脚本的方法
    资源监控工具--spotlight
    Jmeter常见问题
  • 原文地址:https://www.cnblogs.com/qq21497936/p/15442732.html
Copyright © 2011-2022 走看看