项目实战:Qt文件改名工具 v1.2.0(支持递归检索,搜索:模糊匹配,前缀匹配,后缀匹配;重命名:模糊替换,前缀追加,后缀追加)
Posted 长沙红胖子网络科技有限公司
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了项目实战:Qt文件改名工具 v1.2.0(支持递归检索,搜索:模糊匹配,前缀匹配,后缀匹配;重命名:模糊替换,前缀追加,后缀追加)相关的知识,希望对你有一定的参考价值。
若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/120914785
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)
开发专栏:项目实战
需求
在整理文件和一些其他头文件的时候,需要对其名称进行整理和修改,此工具很早就应该写了,创业后,非常忙,今天抽空写了一个顺便提供给学习。
工具和源码下载地址
本篇文章的应用包和源码包可在以下地方下载:
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://hpzwl.blog.csdn.net/article/details/120914785
以上是关于项目实战:Qt文件改名工具 v1.2.0(支持递归检索,搜索:模糊匹配,前缀匹配,后缀匹配;重命名:模糊替换,前缀追加,后缀追加)的主要内容,如果未能解决你的问题,请参考以下文章
项目实战:Qt球机控制工具 v1.0.0(球机运动八个方向以及运动速度,设置运动到指定角度,查询当前