fix: rarely crash after install finished

in DownloadItem::slotAsyncInstall, QProcess should not be deleteLater
since it is not pointer

Log: fix rarely crash; move installExtraArg set before download started
This commit is contained in:
忘记、过去 2025-06-07 13:39:55 +08:00
parent 8cb92d9972
commit f08366a3d5
4 changed files with 28 additions and 21 deletions

@ -536,7 +536,27 @@ void AppIntoPage::on_downloadButton_clicked()
emit clickedDownloadBtn();
DownloadItem *item = dw->addItem(info["Name"].toString(), info["Filename"].toString(), info["Pkgname"].toString(), iconpixmap, downloadUrl);
// 处理 tags设置 installExtraArg
QString installExtraArg;
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
QStringList taglist = info["Tags"].toString().split(";", Qt::SkipEmptyParts);
#else
QStringList taglist = info["Tags"].toString().split(";", QString::SkipEmptyParts);
#endif
if (taglist.contains("native")) {
installExtraArg = "--native";
} else if (taglist.contains("amber-ce-bookworm")) {
installExtraArg = "--amber-ce-bookworm";
} else if (taglist.contains("amber-ce-trixie")) {
installExtraArg = "--amber-ce-trixie";
} else if (taglist.contains("amber-ce-sid")) {
installExtraArg = "--amber-ce-sid";
} else if (taglist.contains("amber-ce-deepin23")) {
installExtraArg = "--amber-ce-deepin23";
}
DownloadItem *item = dw->addItem(info["Name"].toString(), info["Filename"].toString(), info["Pkgname"].toString(),
iconpixmap, downloadUrl, installExtraArg);
if (item == nullptr)
{
return;
@ -552,21 +572,6 @@ void AppIntoPage::on_downloadButton_clicked()
Qt::QueuedConnection);
isDownloading(downloadUrl);
// 处理 tags设置 installExtraArg
QString tags = info["Tags"].toString();
QStringList taglist = tags.split(";", Qt::SkipEmptyParts);
if (taglist.contains("native")) {
item->installExtraArg = "--native";
} else if (taglist.contains("amber-ce-bookworm")) {
item->installExtraArg = "--amber-ce-bookworm";
} else if (taglist.contains("amber-ce-trixie")) {
item->installExtraArg = "--amber-ce-trixie";
} else if (taglist.contains("amber-ce-sid")) {
item->installExtraArg = "--amber-ce-sid";
} else if (taglist.contains("amber-ce-deepin23")) {
item->installExtraArg = "--amber-ce-deepin23";
}
}
void AppIntoPage::on_pushButton_3_clicked()

@ -252,8 +252,5 @@ void DownloadItem::slotAsyncInstall(int t)
ui->widget_spinner->hide();
DownloadItem::isInstall = false;
installer.deleteLater();
isInstall.deleteLater();
emit finished(error == 0 && !haveError && !notRoot);
}

@ -85,7 +85,9 @@ void DownloadListWidget::clearItem()
ui->listWidget->clear();
}
DownloadItem* DownloadListWidget::addItem(QString name, QString fileName, QString pkgName, const QPixmap icon, QString downloadurl)
DownloadItem* DownloadListWidget::addItem(QString name, QString fileName, QString pkgName,
const QPixmap icon, QString downloadurl,
const QString &installExtraArg)
{
if (fileName.isEmpty())
{
@ -104,6 +106,7 @@ DownloadItem* DownloadListWidget::addItem(QString name, QString fileName, QStrin
di->setName(name);
di->setFileName(fileName);
di->pkgName = pkgName;
di->installExtraArg = installExtraArg;
di->seticon(icon);
QListWidgetItem *pItem = new QListWidgetItem();
pItem->setSizeHint(QSize(240, 56)); // ui 中单个 downloaditem 高度固定 56px上下 margin 8px图片固定 48x48

@ -19,7 +19,9 @@ class DownloadListWidget : public DBlurEffectWidget
Q_OBJECT
public:
DownloadItem *addItem(QString name, QString fileName, QString pkgName, const QPixmap icon, QString downloadurl);
DownloadItem *addItem(QString name, QString fileName, QString pkgName,
const QPixmap icon, QString downloadurl,
const QString &installExtraArg);
int nowDownload = 0;
int allDownload = 0;
int toDownload = 0;