fix: 修复下载列表对话框中,点击某个 item 取消下载按钮后下载列表无法再次显示的问题

MainWindow::notify 中焦点判断异常,未去除 QStyleSheetStyle 导致错误认为需要隐藏下载管理对话框

Log: 判断 focusIn 事件前排除 QStyleSheetStyle 对象
This commit is contained in:
zty199 2023-02-19 00:24:36 +08:00
parent 0001df153b
commit 4825417de8
7 changed files with 27 additions and 35 deletions

@ -1,9 +1,7 @@
#include "downloadworker.h" #include "downloadworker.h"
#include <QEventLoop>
#include <QProcess> #include <QProcess>
#include <QRegularExpression> #include <QRegularExpression>
#include <QDir>
#include <QtConcurrent> #include <QtConcurrent>
#include <QStandardPaths> #include <QStandardPaths>

@ -2,9 +2,7 @@
#define DOWNLOADWORKER_H #define DOWNLOADWORKER_H
#include <QObject> #include <QObject>
#include <QList> #include <QVector>
#include <QFile>
#include <QNetworkReply>
class DownloadController : public QObject class DownloadController : public QObject
{ {
@ -19,23 +17,19 @@ public:
qint64 getFileSize(const QString& url); qint64 getFileSize(const QString& url);
QString replaceDomain(const QString& url, const QString domain); QString replaceDomain(const QString& url, const QString domain);
signals:
void errorOccur(const QString& msg);
void downloadProcess(QString, qint64, qint64);
void downloadFinished();
private: private:
int threadNum; int threadNum;
qint64 pidNumber = -1; qint64 pidNumber = -1;
QString filename; QString filename;
qint64 fileSize; qint64 fileSize;
QVector<QPair<qint64, qint64>> ranges; QVector<QPair<qint64, qint64>> ranges;
QFile *file;
bool finished = false; bool finished = false;
QVector<QString> domains; QVector<QString> domains;
signals:
void errorOccur(const QString& msg);
void downloadProcess(QString, qint64, qint64);
void downloadFinished();
}; };
#endif // FILEDOWNLOADWORKER_H #endif // FILEDOWNLOADWORKER_H

@ -3,6 +3,7 @@
#include "utils/widgetanimation.h" #include "utils/widgetanimation.h"
#include "widgets/common/progressbutton.h" #include "widgets/common/progressbutton.h"
#include "widgets/downloadlistwidget.h" #include "widgets/downloadlistwidget.h"
#include "widgets/common/downloaditem.h"
#include "dbus/dbussparkstoreservice.h" #include "dbus/dbussparkstoreservice.h"
#include "application.h" #include "application.h"
@ -10,6 +11,7 @@
#include <DWidgetUtil> #include <DWidgetUtil>
#include <DGuiApplicationHelper> #include <DGuiApplicationHelper>
#include <QDesktopServices>
#include <QAbstractButton> #include <QAbstractButton>
#include <QtConcurrent> #include <QtConcurrent>
@ -427,7 +429,8 @@ void MainWindow::notify(QObject *receiver, QEvent *event)
return; return;
} }
if (receiver->inherits("QWidgetWindow")) { if (receiver->inherits("QWidgetWindow")
|| receiver->inherits("QStyleSheetStyle")) {
return; return;
} }

@ -2,8 +2,10 @@
#include "ui_appintopage.h" #include "ui_appintopage.h"
#include "backend/sparkapi.h" #include "backend/sparkapi.h"
#include "widgets/downloadlistwidget.h" #include "widgets/downloadlistwidget.h"
#include "widgets/common/downloaditem.h"
#include "backend/image_show.h" #include "backend/image_show.h"
#include "application.h" #include "application.h"
#include "utils/utils.h"
#include <QtConcurrent> #include <QtConcurrent>
#include <QClipboard> #include <QClipboard>

@ -1,8 +1,6 @@
#ifndef APPINTOPAGE_H #ifndef APPINTOPAGE_H
#define APPINTOPAGE_H #define APPINTOPAGE_H
#include "utils/utils.h"
#include <QWidget> #include <QWidget>
#include <QJsonObject> #include <QJsonObject>
#include <QUrl> #include <QUrl>

@ -1,11 +1,14 @@
#include "downloadlistwidget.h" #include "downloadlistwidget.h"
#include "ui_downloadlistwidget.h" #include "ui_downloadlistwidget.h"
#include <QGraphicsOpacityEffect> #include "widgets/common/downloaditem.h"
#include <QPropertyAnimation> #include "backend/sparkapi.h"
#include <QDebug> #include "backend/downloadworker.h"
#include "utils/utils.h"
#include "application.h"
#include <QDesktopServices>
#include <QtConcurrent> #include <QtConcurrent>
#include <QDebug>
DownloadListWidget::DownloadListWidget(QWidget *parent) : DBlurEffectWidget(parent), DownloadListWidget::DownloadListWidget(QWidget *parent) : DBlurEffectWidget(parent),
ui(new Ui::DownloadListWidget) ui(new Ui::DownloadListWidget)
@ -118,14 +121,12 @@ void DownloadListWidget::startRequest(QUrl url, QString fileName)
isdownload = true; isdownload = true;
downloaditemlist[allDownload - 1]->free = false; downloaditemlist[allDownload - 1]->free = false;
// 使用懒汉式单例来存储downloadController // 使用懒汉式单例来存储downloadController
if (downloadController == nullptr) if (downloadController == nullptr)
{ {
downloadController = new DownloadController; // 并发下载,在第一次点击下载按钮的时候才会初始化 downloadController = new DownloadController; // 并发下载,在第一次点击下载按钮的时候才会初始化
} }
if (downloadController) if (downloadController)
{ {
downloadController->disconnect(); downloadController->disconnect();
@ -139,7 +140,6 @@ void DownloadListWidget::startRequest(QUrl url, QString fileName)
downloadController->startDownload(url.toString()); downloadController->startDownload(url.toString());
} }
/*************************************************************** /***************************************************************
* @brief * @brief
* @param * @param
@ -178,8 +178,6 @@ void DownloadListWidget::httpFinished() // 完成下载
startRequest(urList.at(nowDownload - 1), fileName); startRequest(urList.at(nowDownload - 1), fileName);
} }
}); });
} }
void DownloadListWidget::updateDataReadProgress(QString speedInfo, qint64 bytesRead, qint64 totalBytes) void DownloadListWidget::updateDataReadProgress(QString speedInfo, qint64 bytesRead, qint64 totalBytes)

@ -1,20 +1,19 @@
#ifndef DOWNLOADLISTWIDGET_H #ifndef DOWNLOADLISTWIDGET_H
#define DOWNLOADLISTWIDGET_H #define DOWNLOADLISTWIDGET_H
#include <DBlurEffectWidget>
#include <QWidget> #include <QWidget>
#include <QTimer> #include <QTimer>
#include <DBlurEffectWidget>
#include <QNetworkAccessManager>
#include <QDesktopServices>
#include "widgets/common/downloaditem.h"
#include "backend/sparkapi.h"
#include "backend/downloadworker.h"
#include "utils/utils.h"
DWIDGET_USE_NAMESPACE
namespace Ui { namespace Ui {
class DownloadListWidget; class DownloadListWidget;
} }
DWIDGET_USE_NAMESPACE
class DownloadItem;
class DownloadController;
class DownloadListWidget : public DBlurEffectWidget class DownloadListWidget : public DBlurEffectWidget
{ {
Q_OBJECT Q_OBJECT