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 |