fix:修正主动中断检查后崩溃问题。
This commit is contained in:
@@ -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_) {
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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 |
|
||||||
|
|||||||
Reference in New Issue
Block a user