From d0a0d06c1b5139f4ddf455c4db1a812fade335c5 Mon Sep 17 00:00:00 2001 From: taynpg Date: Sat, 15 Nov 2025 23:48:30 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E6=AD=A3=E4=B8=BB?= =?UTF-8?q?=E5=8A=A8=E4=B8=AD=E6=96=AD=E6=A3=80=E6=9F=A5=E5=90=8E=E5=B4=A9?= =?UTF-8?q?=E6=BA=83=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Gui/Control/FileControl.cpp | 19 +++++++++++++++++++ Gui/Control/FileControl.h | 6 ++++++ Gui/Form/Loading.cpp | 11 ++++++++++- Gui/Form/Loading.h | 2 ++ Gui/Form/Transform.cpp | 17 ++++++++++++++++- Gui/Form/Transform.h | 1 + Gui/frelayGUI.cpp | 11 ++++++++++- Note/version.md | 1 + 8 files changed, 65 insertions(+), 3 deletions(-) diff --git a/Gui/Control/FileControl.cpp b/Gui/Control/FileControl.cpp index 8e5c394..6b9d54f 100644 --- a/Gui/Control/FileControl.cpp +++ b/Gui/Control/FileControl.cpp @@ -115,6 +115,9 @@ void FileManager::InitMenu() menu_->addAction(tr("过滤器"), this, &FileManager::ShowFilterForm); menu_->addAction(tr("复制文件路径"), this, &FileManager::CopyFullPath); menu_->addAction(tr("属性"), this, &FileManager::ShowProperties); + menu_->addAction(tr("重命名"), this, &FileManager::OperRename); + menu_->addAction(tr("删除"), this, &FileManager::OperDelete); + menu_->addAction(tr("新建文件夹"), this, &FileManager::OperNewFolder); menu_->addSeparator(); } @@ -521,6 +524,22 @@ void FileManager::UpDown() emit sigSendTasks(tasks); } +void FileManager::OperNewFolder() +{ +} + +void FileManager::OperDelete() +{ +} + +void FileManager::OperRename() +{ +} + +void FileManager::WaitMsg() +{ +} + QString FileManager::GetRoot() { if (isRemote_) { diff --git a/Gui/Control/FileControl.h b/Gui/Control/FileControl.h index 6c6dbea..4710359 100644 --- a/Gui/Control/FileControl.h +++ b/Gui/Control/FileControl.h @@ -58,6 +58,12 @@ private: void CopyFullPath(); void ShowProperties(); void UpDown(); + +private: + void OperNewFolder(); + void OperDelete(); + void OperRename(); + void WaitMsg(); public slots: void evtHome(); diff --git a/Gui/Form/Loading.cpp b/Gui/Form/Loading.cpp index 033bd9f..affef4d 100644 --- a/Gui/Form/Loading.cpp +++ b/Gui/Form/Loading.cpp @@ -13,6 +13,7 @@ LoadingDialog::LoadingDialog(QWidget* parent) : QDialog(parent) */ void LoadingDialog::initUi() { + isUserCancel_ = false; this->setFixedSize(250, 250); m_pCenterFrame = new QFrame(this); m_pCenterFrame->setGeometry(10, 10, 230, 230); @@ -50,7 +51,10 @@ void LoadingDialog::initUi() "}"); m_pCancelBtn->setGeometry(25, 180, 180, 35); m_pCancelBtn->setEnabled(true); - connect(m_pCancelBtn, &QPushButton::clicked, this, &LoadingDialog::cancelBtnClicked); + connect(m_pCancelBtn, &QPushButton::clicked, this, [this]() { + isUserCancel_ = true; + cancelBtnClicked(); + }); // 实例阴影shadow QGraphicsDropShadowEffect* shadow = new QGraphicsDropShadowEffect(this); @@ -138,6 +142,11 @@ int LoadingDialog::exec() return QDialog::exec(); } +bool LoadingDialog::isUserCancel() const +{ + return isUserCancel_; +} + LoadingDialog::~LoadingDialog() { delete m_pLoadingMovie; diff --git a/Gui/Form/Loading.h b/Gui/Form/Loading.h index 783eb6f..1522a32 100644 --- a/Gui/Form/Loading.h +++ b/Gui/Form/Loading.h @@ -25,6 +25,7 @@ public: public: int exec() override; + bool isUserCancel() const; protected: void paintEvent(QPaintEvent* event) override; @@ -39,6 +40,7 @@ public slots: void cancelBtnClicked(); private: + bool isUserCancel_{}; QFrame* m_pCenterFrame; QLabel* m_pMovieLabel; QMovie* m_pLoadingMovie; diff --git a/Gui/Form/Transform.cpp b/Gui/Form/Transform.cpp index 239630f..fedf1f4 100644 --- a/Gui/Form/Transform.cpp +++ b/Gui/Form/Transform.cpp @@ -172,6 +172,11 @@ QVector CheckCondition::GetTasks() const return tasks_; } +bool CheckCondition::IsQuit() const +{ + return isAlreadyInter_; +} + void CheckCondition::recvFrame(QSharedPointer frame) { InfoMsg info = infoUnpack(frame->data); @@ -199,12 +204,18 @@ void CheckCondition::interrupCheck() if (!isAlreadyInter_) { isAlreadyInter_ = true; qWarning() << tr("中断文件校验......"); + tasks_.clear(); emit sigCheckOver(); } } void CheckCondition::run() { + if (tasks_.empty()) { + qInfo() << tr("没有需要校验的文件或者被中断......"); + return; + } + qInfo() << tr("开始文件校验......"); isRun_ = true; msg_.clear(); @@ -243,7 +254,11 @@ void CheckCondition::run() return; } while (isRun_) { - QThread::msleep(10); + QThread::msleep(1); + if (isAlreadyInter_) { + qInfo() << tr("线程中断文件校验等待......"); + return; + } if (msg_.isEmpty()) { continue; } diff --git a/Gui/Form/Transform.h b/Gui/Form/Transform.h index ef3ba16..fd24789 100644 --- a/Gui/Form/Transform.h +++ b/Gui/Form/Transform.h @@ -86,6 +86,7 @@ public: void SetClientCore(ClientCore* clientCore); void SetTasks(const QVector& tasks); QVector GetTasks() const; + bool IsQuit() const; Q_SIGNALS: void sigCheckOver(); diff --git a/Gui/frelayGUI.cpp b/Gui/frelayGUI.cpp index a4b4fdb..91c9017 100644 --- a/Gui/frelayGUI.cpp +++ b/Gui/frelayGUI.cpp @@ -154,15 +154,24 @@ void frelayGUI::HandleTask(const QVector& tasks) checking.setTipsText("正在检查文件..."); connect(&cond, &CheckCondition::sigCheckOver, &checking, &LoadingDialog::cancelBtnClicked); - connect(&checking, &LoadingDialog::cancelWaiting, &cond, &CheckCondition::interrupCheck); connect(clientCore_, &ClientCore::sigMsgAnswer, &cond, &CheckCondition::recvFrame); cond.start(); checking.exec(); + if (checking.isUserCancel()) { + cond.interrupCheck(); + cond.wait(); + return; + } + // 检查结果 auto reTasks = cond.GetTasks(); if (!CheckTaskResult(reTasks)) { + cond.wait(); + return; + } + if (reTasks.empty()) { return; } transform_->SetTasks(reTasks); diff --git a/Note/version.md b/Note/version.md index 2d5ddbe..f9ed626 100644 --- a/Note/version.md +++ b/Note/version.md @@ -8,6 +8,7 @@ | 序号 | 类型 | 内容 | 说明 | 基于版本 | 完成版本 | | :--: | :--: | ------------------------------------------------------------ | :----: | :------: | :------: | +| 41 | 问题 | 主动中断检查等待后,软件崩溃。 | | 0.2.3 | 0.2.4 | | 40 | 问题 | 上传方完成后,接收端未接收完毕不能退出的问题。 | | 0.2.3 | 0.2.4 | | 39 | 优化 | Console端断联后应当自动退出。 | | 0.2.3 | 0.2.4 | | 38 | 功能 | PE中使用没有拖拽功能,文件管理器要有下载/上传按钮。 | | 0.2.3 | 0.2.4 |