chore:异步更新

This commit is contained in:
momen 2025-06-18 22:17:56 +08:00
parent b5e0b709cc
commit b68029f5db
2 changed files with 51 additions and 31 deletions

View File

@ -9,8 +9,8 @@ set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Network)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Network Concurrent)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network Concurrent)
set(PROJECT_SOURCES
main.cpp
@ -47,7 +47,7 @@ else()
endif()
endif()
target_link_libraries(Spark-Update-Tool PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Network)
target_link_libraries(Spark-Update-Tool PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::Network Qt${QT_VERSION_MAJOR}::Concurrent)
# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an

View File

@ -2,6 +2,9 @@
#include "./ui_mainwindow.h"
#include <QProcess>
#include <QMessageBox>
#include <QProgressDialog>
#include <QtConcurrent> // 新增
#include <QFutureWatcher> // 新增
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
@ -9,8 +12,19 @@ MainWindow::MainWindow(QWidget *parent)
, m_model(new AppListModel(this))
, m_delegate(new AppDelegate(this))
{
runAptssUpgrade();
QProgressDialog *progressDialog = new QProgressDialog("正在与服务器通信,获取更新信息中...", QString(), 0, 0, this);
progressDialog->setWindowModality(Qt::ApplicationModal);
progressDialog->setCancelButton(nullptr);
progressDialog->setWindowTitle("请稍候");
progressDialog->setMinimumDuration(0);
progressDialog->setWindowFlags(progressDialog->windowFlags() & ~Qt::WindowCloseButtonHint); // 禁用关闭按钮
progressDialog->show();
//异步执行runAptssUpgrade
QFutureWatcher<void> *watcher = new QFutureWatcher<void>(this);
connect(watcher, &QFutureWatcher<void>::finished, this, [=]() {
progressDialog->close();
progressDialog->deleteLater();
watcher->deleteLater();
ui->setupUi(this);
// 创建 QListView 并设置父控件为 ui->appWidget
@ -43,6 +57,12 @@ MainWindow::MainWindow(QWidget *parent)
checkUpdates();
initStyle();
});
// 启动异步任务
watcher->setFuture(QtConcurrent::run([this](){
runAptssUpgrade();
}));
}
//初始化控件样式
void MainWindow::initStyle()