修复 加载应用程序信息时随机崩溃

这个问题就是因为在异步操作时直接修改GUI,导致事件发生时GUI与异步加载线程不同步导致程序崩溃。将所有加载操作已移至
SpkAppInfoLoaderThread,在其需要操作GUI时阻塞该工作线程并发射信号让主线程操作GUI,以解决该问题。
This commit is contained in:
RigoLigoRLC
2020-10-09 02:06:28 +08:00
parent 1b56d3ad52
commit 367c8d857c
6 changed files with 413 additions and 86 deletions

View File

@@ -21,6 +21,9 @@
#include <DTitlebar>
#include <DSearchEdit>
#include <progressload.h>
#include "workerthreads.h"
#include "image_show.h"
#define LIST_MAX 99 //一次最多下载数量
#define TMP_PATH "/tmp/spark-store"
@@ -56,6 +59,17 @@ private slots:
void httpFinished();
void httpReadyRead();
void updateDataReadProgress(qint64,qint64);
// SpkAppInfoLoaderThread的槽函数
void sltAppinfoResetUi();
void sltAppinfoTags(QStringList *tagList);
void sltAppinfoDetails(QString *name, QString *details, QString *info,
QString *website, QString *packageName,
QUrl *fileUrl, bool isInstalled);
void sltAppinfoIcon(QPixmap *icon);
void sltAppinfoScreenshot(QPixmap *picture, int index);
void sltAppinfoFinish();
void on_pushButton_download_clicked();
void on_pushButton_return_clicked();
void on_comboBox_server_currentIndexChanged(const QString &arg1);
@@ -125,6 +139,9 @@ private:
DSearchEdit *searchEdit=new DSearchEdit;
DTitlebar *titlebar;
QList<image_show*> label_screen;
SpkAppInfoLoaderThread appinfoLoadThread;
};
#endif // WIDGET_H