#include "widget.h"
#include "ui_widget.h"
#include <QDir>
#include <QFile>
#include <QFileDialog>
#include <QDateTime>
#include <QByteArray>
#include <QTextCodec>
const int CUT_SIZE = 4;
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
this->setWindowTitle(tr("JPG&XML"));
this->setWindowIcon(QIcon(":/new/images/xml.ico"));
connect(&workThread, &CheckOutFileThread::sendProcessValueRange, this, [&](int maxlVal) {
ui->progressBar->setRange(0, maxlVal);
});
connect(&workThread, &CheckOutFileThread::sendProgressSignal, this, [&](int value) {
if(value == 0) {
ui->dealShowLabel->setText(tr("源文件与目标文件完整对应,未作处理"));
} else {
ui->progressBar->setValue(value);
ui->dealShowLabel->setText(tr("处理完毕,源文件与目标文件完整对应"));
}
});
connect(&workThread, &CheckOutFileThread::sendResaultCount, this, [&](int jpgNum, int xmlNum) {
ui->finalJpgNumLabel->setText(QString("%1").arg(jpgNum));
ui->finalXmlNumLabel->setText(QString("%1").arg(xmlNum));
});
connect(&workThread, &CheckOutFileThread::sendLogFileCreat, this,
[&](QString txt){ ui->logShowLabel->setText(txt); });
}
Widget::~Widget()
{
if (workThread.isRunning()) {
workThread.killTimer(0);
}
delete ui;
}
void Widget::setBackUpDir()
{
QDir recoverDir("./"); // 也可设置为QCoreApplication::applicationDirPath()
if (!recoverDir.exists("backup")) {
recoverDir.mkdir("backup");
ui->dealShowLabel->setText("备份文件夹建立成功!");
}
}
void Widget::on_JPGButton_clicked()
{
QString jpgFileDir = QFileDialog::getExistingDirectory(this, "JPG文件目录", "/");
if (jpgFileDir.isEmpty()) {
ui->dealShowLabel->setText(tr("文件夹路径获取失败!"));
return;
}
ui->locationJpgLabel->setText(jpgFileDir);
// 记录对文件的操作时间,在exe目录下新建文件夹,用于备份删除过的源文件,并记录操作log日志;
setBackUpDir();
QFile JpgXmlLog("log.txt");
bool openSucceed = JpgXmlLog.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append);
openSucceed ? ui->logShowLabel->setText(tr("日志文件创建成功")) :
ui->logShowLabel->setText(tr("日志文件创建失败"));
QByteArray JpgFileOp = QTextCodec::codecForName("UTF-8")->fromUnicode("JPG目录冗余文件删除时间: ");
JpgXmlLog.write(JpgFileOp);
JpgXmlLog.write((QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss") + "\n").toLatin1().data());
// 遍历目录文件,移动所有非jpg格式图片至备份的backup目录中
int delCount = 0;
QDir JpgDir(jpgFileDir);
QStringList moveOfJpg = JpgDir.entryList();
foreach (QString delOther, moveOfJpg) {
if (QString::compare(delOther.right(CUT_SIZE), ".jpg") != 0) { // CUT_SIZE = 4
QString srcDirFile = jpgFileDir + "/" + delOther;
QString backupDirFile = QString("backup") + "/" + delOther;
// QString backupDirFile = QCoreApplication::applicationDirPath() + "/" + "backup" + "/" + delOther;
QFile::copy(srcDirFile, backupDirFile);
JpgXmlLog.write((delOther + "\n").toLatin1().data());
JpgDir.remove(delOther);
delCount++;
}
}
JpgXmlLog.close();
ui->initJpgNumLabel->setText(QString::number(JpgDir.count() - delCount));
m_jpgFilePath = jpgFileDir;
}
void Widget::on_XMLButton_clicked()
{
QString xmlFileDir=QFileDialog::getExistingDirectory(this,"XML文件目录","/");
if (xmlFileDir.isEmpty()) {
ui->dealShowLabel->setText(tr("文件夹路径获取失败!"));
return;
}
ui->locationXmlLabel->setText(xmlFileDir);
QFile JpgXmlLog("log.txt");
bool openSucceed = JpgXmlLog.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append);
openSucceed ? ui->logShowLabel->setText(tr("日志文件创建成功")) :
ui->logShowLabel->setText(tr("日志文件创建失败"));
QByteArray XmlFileOp=QTextCodec::codecForName("UTF-8")->fromUnicode("XML目录冗余文件删除时间:");
JpgXmlLog.write(XmlFileOp);
JpgXmlLog.write((QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")+"\n").toLatin1().data());
int delCount=0;
QDir XmlDir(xmlFileDir);
QStringList delOutOfXml=XmlDir.entryList();
foreach (QString delOther, delOutOfXml) {
if(QString::compare(delOther.right(CUT_SIZE), ".xml") != 0) {
QString srcDirFile = xmlFileDir + "/" + delOther;
QString backupDirFile = QString("backup") + "/" + delOther;
// QString backupDirFile = QCoreApplication::applicationDirPath() + "/" + "backup" + "/" + delOther;
QFile::copy(srcDirFile, backupDirFile);
JpgXmlLog.write((delOther + "\n").toLatin1().data());
XmlDir.remove(delOther);
delCount++;
}
}
JpgXmlLog.close();
ui->initXmlNumLabel->setText(QString::number(XmlDir.count() - delCount));
m_xmlFilePath = xmlFileDir;
}
void Widget::on_startButton_clicked()
{
if(m_jpgFilePath.isEmpty() || m_xmlFilePath.isEmpty() || workThread.isRunning()) {
ui->logShowLabel->setText("路径异常或正在处理,请重试...");
return;
}
workThread.setParent(this);
workThread.InitFilePath(m_jpgFilePath, m_xmlFilePath);
workThread.start();
}
void Widget::on_recordQueryButton_clicked()
{
LogRecord RecordShow;
RecordShow.exec();
}
没有合适的资源?快使用搜索试试~ 我知道了~
Qt编写的标注文件校正小工具(源文件jpg,目标文件xml)
共21个文件
h:5个
cpp:4个
ui:2个
需积分: 17 2 下载量 201 浏览量
2022-12-10
21:38:41
上传
评论
收藏 115KB RAR 举报
温馨提示
图片校正小工具主要针对jpg原始图片和标注后生成的xml文件进行数目与名称校正(也可在代码中修改对比的后缀后用于同名但后缀不同的任何两个类别的文件数目校正)
资源推荐
资源详情
资源评论
收起资源包目录
JpgXml.rar (21个子文件)
JpgXml
JpgXml.pro.user 32KB
images
topBg.jpg 10KB
xml.ico 17KB
xml3.png 85KB
Makefile.Debug 61KB
logrecord.ui 1011B
widget.h 675B
logrecord.cpp 615B
widget.ui 19KB
logrecord.h 297B
uipic.qrc 178B
Makefile.Release 61KB
JpgXml.pro.user.4a1349a.4.8-pre1 23KB
ui_widget.h 17KB
ui_logrecord.h 2KB
main.cpp 589B
checkoutfilethread.cpp 4KB
Makefile 27KB
JpgXml.pro 1KB
checkoutfilethread.h 649B
widget.cpp 6KB
共 21 条
- 1
资源评论
笨小孩寻聪
- 粉丝: 8
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功