fix:修正主动中断检查后崩溃问题。

This commit is contained in:
2025-11-15 23:48:30 +08:00
parent d73ddf7341
commit d0a0d06c1b
8 changed files with 65 additions and 3 deletions

View File

@@ -115,6 +115,9 @@ void FileManager::InitMenu()
menu_->addAction(tr("过滤器"), this, &FileManager::ShowFilterForm); menu_->addAction(tr("过滤器"), this, &FileManager::ShowFilterForm);
menu_->addAction(tr("复制文件路径"), this, &FileManager::CopyFullPath); menu_->addAction(tr("复制文件路径"), this, &FileManager::CopyFullPath);
menu_->addAction(tr("属性"), this, &FileManager::ShowProperties); 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(); menu_->addSeparator();
} }
@@ -521,6 +524,22 @@ void FileManager::UpDown()
emit sigSendTasks(tasks); emit sigSendTasks(tasks);
} }
void FileManager::OperNewFolder()
{
}
void FileManager::OperDelete()
{
}
void FileManager::OperRename()
{
}
void FileManager::WaitMsg()
{
}
QString FileManager::GetRoot() QString FileManager::GetRoot()
{ {
if (isRemote_) { if (isRemote_) {

View File

@@ -58,6 +58,12 @@ private:
void CopyFullPath(); void CopyFullPath();
void ShowProperties(); void ShowProperties();
void UpDown(); void UpDown();
private:
void OperNewFolder();
void OperDelete();
void OperRename();
void WaitMsg();
public slots: public slots:
void evtHome(); void evtHome();

View File

@@ -13,6 +13,7 @@ LoadingDialog::LoadingDialog(QWidget* parent) : QDialog(parent)
*/ */
void LoadingDialog::initUi() void LoadingDialog::initUi()
{ {
isUserCancel_ = false;
this->setFixedSize(250, 250); this->setFixedSize(250, 250);
m_pCenterFrame = new QFrame(this); m_pCenterFrame = new QFrame(this);
m_pCenterFrame->setGeometry(10, 10, 230, 230); m_pCenterFrame->setGeometry(10, 10, 230, 230);
@@ -50,7 +51,10 @@ void LoadingDialog::initUi()
"}"); "}");
m_pCancelBtn->setGeometry(25, 180, 180, 35); m_pCancelBtn->setGeometry(25, 180, 180, 35);
m_pCancelBtn->setEnabled(true); m_pCancelBtn->setEnabled(true);
connect(m_pCancelBtn, &QPushButton::clicked, this, &LoadingDialog::cancelBtnClicked); connect(m_pCancelBtn, &QPushButton::clicked, this, [this]() {
isUserCancel_ = true;
cancelBtnClicked();
});
// 实例阴影shadow // 实例阴影shadow
QGraphicsDropShadowEffect* shadow = new QGraphicsDropShadowEffect(this); QGraphicsDropShadowEffect* shadow = new QGraphicsDropShadowEffect(this);
@@ -138,6 +142,11 @@ int LoadingDialog::exec()
return QDialog::exec(); return QDialog::exec();
} }
bool LoadingDialog::isUserCancel() const
{
return isUserCancel_;
}
LoadingDialog::~LoadingDialog() LoadingDialog::~LoadingDialog()
{ {
delete m_pLoadingMovie; delete m_pLoadingMovie;

View File

@@ -25,6 +25,7 @@ public:
public: public:
int exec() override; int exec() override;
bool isUserCancel() const;
protected: protected:
void paintEvent(QPaintEvent* event) override; void paintEvent(QPaintEvent* event) override;
@@ -39,6 +40,7 @@ public slots:
void cancelBtnClicked(); void cancelBtnClicked();
private: private:
bool isUserCancel_{};
QFrame* m_pCenterFrame; QFrame* m_pCenterFrame;
QLabel* m_pMovieLabel; QLabel* m_pMovieLabel;
QMovie* m_pLoadingMovie; QMovie* m_pLoadingMovie;

View File

@@ -172,6 +172,11 @@ QVector<TransTask> CheckCondition::GetTasks() const
return tasks_; return tasks_;
} }
bool CheckCondition::IsQuit() const
{
return isAlreadyInter_;
}
void CheckCondition::recvFrame(QSharedPointer<FrameBuffer> frame) void CheckCondition::recvFrame(QSharedPointer<FrameBuffer> frame)
{ {
InfoMsg info = infoUnpack<InfoMsg>(frame->data); InfoMsg info = infoUnpack<InfoMsg>(frame->data);
@@ -199,12 +204,18 @@ void CheckCondition::interrupCheck()
if (!isAlreadyInter_) { if (!isAlreadyInter_) {
isAlreadyInter_ = true; isAlreadyInter_ = true;
qWarning() << tr("中断文件校验......"); qWarning() << tr("中断文件校验......");
tasks_.clear();
emit sigCheckOver(); emit sigCheckOver();
} }
} }
void CheckCondition::run() void CheckCondition::run()
{ {
if (tasks_.empty()) {
qInfo() << tr("没有需要校验的文件或者被中断......");
return;
}
qInfo() << tr("开始文件校验......"); qInfo() << tr("开始文件校验......");
isRun_ = true; isRun_ = true;
msg_.clear(); msg_.clear();
@@ -243,7 +254,11 @@ void CheckCondition::run()
return; return;
} }
while (isRun_) { while (isRun_) {
QThread::msleep(10); QThread::msleep(1);
if (isAlreadyInter_) {
qInfo() << tr("线程中断文件校验等待......");
return;
}
if (msg_.isEmpty()) { if (msg_.isEmpty()) {
continue; continue;
} }

View File

@@ -86,6 +86,7 @@ public:
void SetClientCore(ClientCore* clientCore); void SetClientCore(ClientCore* clientCore);
void SetTasks(const QVector<TransTask>& tasks); void SetTasks(const QVector<TransTask>& tasks);
QVector<TransTask> GetTasks() const; QVector<TransTask> GetTasks() const;
bool IsQuit() const;
Q_SIGNALS: Q_SIGNALS:
void sigCheckOver(); void sigCheckOver();

View File

@@ -154,15 +154,24 @@ void frelayGUI::HandleTask(const QVector<TransTask>& tasks)
checking.setTipsText("正在检查文件..."); checking.setTipsText("正在检查文件...");
connect(&cond, &CheckCondition::sigCheckOver, &checking, &LoadingDialog::cancelBtnClicked); connect(&cond, &CheckCondition::sigCheckOver, &checking, &LoadingDialog::cancelBtnClicked);
connect(&checking, &LoadingDialog::cancelWaiting, &cond, &CheckCondition::interrupCheck);
connect(clientCore_, &ClientCore::sigMsgAnswer, &cond, &CheckCondition::recvFrame); connect(clientCore_, &ClientCore::sigMsgAnswer, &cond, &CheckCondition::recvFrame);
cond.start(); cond.start();
checking.exec(); checking.exec();
if (checking.isUserCancel()) {
cond.interrupCheck();
cond.wait();
return;
}
// 检查结果 // 检查结果
auto reTasks = cond.GetTasks(); auto reTasks = cond.GetTasks();
if (!CheckTaskResult(reTasks)) { if (!CheckTaskResult(reTasks)) {
cond.wait();
return;
}
if (reTasks.empty()) {
return; return;
} }
transform_->SetTasks(reTasks); transform_->SetTasks(reTasks);

View File

@@ -8,6 +8,7 @@
| 序号 | 类型 | 内容 | 说明 | 基于版本 | 完成版本 | | 序号 | 类型 | 内容 | 说明 | 基于版本 | 完成版本 |
| :--: | :--: | ------------------------------------------------------------ | :----: | :------: | :------: | | :--: | :--: | ------------------------------------------------------------ | :----: | :------: | :------: |
| 41 | 问题 | 主动中断检查等待后,软件崩溃。 | | 0.2.3 | 0.2.4 |
| 40 | 问题 | 上传方完成后,接收端未接收完毕不能退出的问题。 | | 0.2.3 | 0.2.4 | | 40 | 问题 | 上传方完成后,接收端未接收完毕不能退出的问题。 | | 0.2.3 | 0.2.4 |
| 39 | 优化 | Console端断联后应当自动退出。 | | 0.2.3 | 0.2.4 | | 39 | 优化 | Console端断联后应当自动退出。 | | 0.2.3 | 0.2.4 |
| 38 | 功能 | PE中使用没有拖拽功能,文件管理器要有下载/上传按钮。 | | 0.2.3 | 0.2.4 | | 38 | 功能 | PE中使用没有拖拽功能,文件管理器要有下载/上传按钮。 | | 0.2.3 | 0.2.4 |