diff --git a/README.md b/README.md index 00f727d..9333212 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,20 @@ # 重复文件检测工具 + windeploy目录下的文件可以直接运行 + +![](resources/img.png) + +![](resources/demo.gif) + ## 环境 - Clion 2022.1.2 - qt 5.14.2 + ## 功能 - 单个文件计算md5 - 文件夹内重复文件检测 - + +## 更新记录 +### 20220619 v1.0.2 +- [x] 增加打开文件目录功能 +- [x] 增加删除文件功能 \ No newline at end of file diff --git a/resources/demo.gif b/resources/demo.gif new file mode 100644 index 0000000..3551cdb Binary files /dev/null and b/resources/demo.gif differ diff --git a/resources/img.png b/resources/img.png new file mode 100644 index 0000000..88fb23e Binary files /dev/null and b/resources/img.png differ diff --git a/src/DuplicateFiles.cpp b/src/DuplicateFiles.cpp index 8d544a6..6e86408 100644 --- a/src/DuplicateFiles.cpp +++ b/src/DuplicateFiles.cpp @@ -1,7 +1,9 @@ // // Created by 12038 on 2022/6/16. // +#include #include "DuplicateFiles.h" +#include DuplicateFiles::DuplicateFiles(QObject *) { @@ -73,3 +75,24 @@ QStringList DuplicateFiles::getFiles(const QString &filesDirPath) { return files; } +void DuplicateFiles::getTextSlot(const QString &text) { + qDebug()<<"widget_2当前的text为:"<< text; + currentText = text; +} + +void DuplicateFiles::openDirSlot() { + QFileInfo fileInfo(currentText); + QString filePath = fileInfo.absolutePath(); + qDebug()<<"filePath"< &); + void delActionFeedbackSignal(bool delFlag); public slots: void getFilesSlot(const QString & filesDirPath); void calMd5Slot(const QString &filePath); + void getTextSlot(const QString &); + void openDirSlot(); + void delActionTriggeredSlot(); private: QByteArray calMd5(const QString &filePath); QStringList getFiles(const QString &); QHash duplicateFiles; + QString currentText = ""; + }; diff --git a/src/widget.cpp b/src/widget.cpp index 816bd6b..bb54915 100644 --- a/src/widget.cpp +++ b/src/widget.cpp @@ -4,6 +4,7 @@ // You may need to build the project (run Qt uic code generator) to get "ui_Widget.h" resolved +#include #include "widget.h" #include "ui_widget.h" @@ -61,6 +62,24 @@ Widget::Widget(QWidget *parent) this, SLOT(duplicateFilesSlot(const QHash &))); connect(ui->listWidget, SIGNAL(currentTextChanged(const QString &)), this, SLOT(currentTextChangedSlot(const QString &))); + + connect(ui->listWidget_2, SIGNAL(customContextMenuRequested(const QPoint &)), + this, SLOT(on_listWidget_customContextMenuRequested(const QPoint &))); + ui->listWidget_2->setContextMenuPolicy(Qt::CustomContextMenu); + + delAction = new QAction(); + delAction->setText("删除文件"); + openAction = new QAction(); + openAction->setText("打开文件目录"); + + connect(delAction, SIGNAL(triggered(bool)), + duplicateFiles, SLOT(delActionTriggeredSlot())); + connect(ui->listWidget_2, SIGNAL(currentTextChanged(const QString &)), + duplicateFiles, SLOT(getTextSlot(const QString &))); + connect(openAction, SIGNAL(triggered(bool)), + duplicateFiles, SLOT(openDirSlot())); + connect(duplicateFiles, SIGNAL(delActionFeedbackSignal(bool)), + this, SLOT(delActionFeedbackSlot(bool))); } Widget::~Widget() @@ -68,6 +87,7 @@ Widget::~Widget() duplicateFiles->deleteLater(); myThread->exit(); myThread->wait(10 * 1000); + delete ui; } @@ -175,4 +195,36 @@ void Widget::currentTextChangedSlot(const QString ¤tText) { ui->listWidget_2->addItems(this->duplicateResults[currentText.toLocal8Bit()]); } +void Widget::on_listWidget_customContextMenuRequested(const QPoint &pos) +{ +// ui->listWidget_2->currentTextChanged() + QMenu *menu = new QMenu(this); +// menu->addAction(ui->actionAdd); +// menu->addAction(ui->actionClear); +// menu->addAction(ui->actionDelete); +// menu->addAction(ui->actionInsert); + menu->addAction(this->delAction); + menu->addAction(this->openAction); + menu->addSeparator(); + +// menu->addAction(ui->actionInit); +// menu->addSeparator(); +// menu->addAction(ui->actionSelAll); +// menu->addAction(ui->actionSelInv); +// menu->addAction(ui->actionSelNone); +// menu->addAction(ui->actionSelPopMenu); + menu->exec(QCursor::pos()); + delete menu; +} + +void Widget::delActionFeedbackSlot(bool flag) { + if(flag){ + qDebug()<<"remove item"; + QListWidgetItem * item = ui->listWidget_2->currentItem(); + qDebug()<listWidget_2->removeItemWidget(item); + delete item; + } +} + diff --git a/src/widget.h b/src/widget.h index bcaa9cc..f57054e 100644 --- a/src/widget.h +++ b/src/widget.h @@ -15,6 +15,7 @@ #include #include #include +#include QT_BEGIN_NAMESPACE namespace Ui { class Widget; } @@ -45,6 +46,7 @@ public slots: void processSlot(const int &, const int &); void duplicateFilesSlot(const QHash &); void currentTextChangedSlot(const QString &); + void delActionFeedbackSlot(bool flag); private slots: void btnMaxClickedSlot(); @@ -53,6 +55,8 @@ private slots: void calMd5ofFileSlot(); void selectDirSlot(); + void on_listWidget_customContextMenuRequested(const QPoint &pos); + private: Ui::Widget *ui; DuplicateFiles * duplicateFiles; @@ -61,6 +65,9 @@ private: QPoint mousePosInWindow = QPoint(); QHash duplicateResults; + QAction *delAction; + QAction *openAction; + }; diff --git a/src/widget.ui b/src/widget.ui index e931b73..84bb0a8 100644 --- a/src/widget.ui +++ b/src/widget.ui @@ -386,7 +386,11 @@ - + + + Qt::CustomContextMenu + +