若該文為原創文章,轉載請注明原文出處
本文章博客地址:https://blog.csdn.net/qq21497936/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://blog.csdn.net/qq21497936/article/details/120914785
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/333546.html
標籤:其他
上一篇:數字影像處理習題(一)
