Qt实现文件分类小工具
时间:2019-02-16
本文章向大家介绍Qt实现文件分类小工具,主要包括Qt实现文件分类小工具使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、工具说明:
项目中用到需要经常分类数据,就使用Qt实现了一个文件分类小工具,选中文件夹后会按后缀名字自动创建一个文件夹把后缀相同的文件放在一个文件夹中。软件截图及效果如下:
二、实现代码
/**********************mainwindow.h*******************/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFileDialog>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButtonInput_clicked();
void on_pushButtonOutput_clicked();
private:
QFileInfoList getFileList(QString path);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
/**********************mainwindow.cpp*******************/
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QMessageBox>
#include <QFont>
#pragma execution_character_set("utf-8")
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButtonInput_clicked()
{
QString filePath = QFileDialog::getExistingDirectory(this,tr("open directory"),"/home",
QFileDialog::ShowDirsOnly
| QFileDialog::DontResolveSymlinks);
ui->lineEditInput->setText(filePath);
ui->lineEditInput->setEnabled(false);
}
void MainWindow::on_pushButtonOutput_clicked()
{
QString outPath = QFileDialog::getExistingDirectory(this,tr("open directory"),"/home",
QFileDialog::ShowDirsOnly
| QFileDialog::DontResolveSymlinks);
ui->lineEditOutput->setText(outPath);
ui->lineEditOutput->setEnabled(false);
ui->tableWidget->clear();
QString inputPath = ui->lineEditInput->text();
QFileInfoList tempFileInfoList = getFileList(inputPath);
for(int i=0; i<tempFileInfoList.size(); i++)
{
QFileInfo tempFileInfo = tempFileInfoList.at(i);
QString tempSuffix = tempFileInfo.completeSuffix();
if(tempSuffix.size() < 1)
{
tempSuffix = "fileNoSuffix";
}
QString tempOutPath = outPath + "/" + tempSuffix;
QDir tmpDir(tempOutPath);
if(!tmpDir.exists())
{
tmpDir.mkpath(tempOutPath);
}
QString tmpFileName = tempFileInfo.absoluteFilePath();
QString fileName = tempFileInfo.fileName();
tempOutPath = tempOutPath+"/"+fileName;
// qDebug() << tmpFileName << endl;
// 注意QFile::copy的使用,我开始以为第二个参数传文件夹名字,
// 一直复制不成功,才知道是要传具体的文件名字才行
QFile::copy(tmpFileName,tempOutPath);
QTableWidgetItem *suffixItem = new QTableWidgetItem();
suffixItem->setText(tempSuffix);
QTableWidgetItem *outpathItem = new QTableWidgetItem();
outpathItem->setText(tempOutPath);
outpathItem->setToolTip(tempOutPath);
ui->tableWidget->insertRow(i);
ui->tableWidget->setItem(i,0,suffixItem);
ui->tableWidget->setItem(i,1,outpathItem);
ui->tableWidget->setAutoScroll(true);
ui->statusBar->showMessage("choose data....");
QFont font("Times",18,QFont::Black);
ui->statusBar->setFont(font);
}
QMessageBox::information(NULL,"title","choose over");
ui->statusBar->showMessage("choose over");
}
QFileInfoList MainWindow::getFileList(QString path)
{
QDir dir(path);
QFileInfoList fileList = dir.entryInfoList(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
QFileInfoList folderList = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
for(int i=0; i<folderList.size(); i++)
{
QString name = folderList.at(i).absoluteFilePath();
QFileInfoList chileFileList = getFileList(name);
fileList.append(chileFileList);
}
return fileList;
}
/**********************main.cpp*******************/
#include "mainwindow.h"
#include <QApplication>
#include <QTextCodec>
#pragma execution_character_set("utf-8")
int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));
#else
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
#endif
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
代码很简单不再加注释了。需要注意的地方就是QFile::copy()的使用,代码中已做注释,不再赘述。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- caffe详解之工具篇
- caffe详解之Python接口
- caffe详解之mnist手写体识别
- Python数据分析之基础篇(一)
- Python数据分析之基础篇(二)
- linux操作系统df、du命令
- Python数据分析之基础篇(三)
- Python数据分析之matplotlib(基础篇)
- Python数据分析之matplotlib(提高篇)
- Python数据分析之matplotlib(应用篇)
- Intel OpenCL 之 Pipeline(一):基本概念
- Intel OpenCL 之 Pipeline(二)For循环的执行机制
- Intel OpenCL 之 Pipeline(三)不能pipeline的可能情况
- Intel OpenCL 之 Pipeline(四):Pipeline不理想的几种情况
- Python数据分析之NumPy(基础篇)