diff --git a/src/widgets/dprintpreviewdialog.cpp b/src/widgets/dprintpreviewdialog.cpp index 840bc60c4..c5db2e0b5 100644 --- a/src/widgets/dprintpreviewdialog.cpp +++ b/src/widgets/dprintpreviewdialog.cpp @@ -1017,7 +1017,7 @@ void DPrintPreviewDialogPrivate::initdata() { Q_Q(DPrintPreviewDialog); QStringList itemlist; - itemlist << QPrinterInfo::availablePrinterNames() + itemlist << availablePrinterNames() << qApp->translate("DPrintPreviewDialogPrivate", "Print to PDF") << qApp->translate("DPrintPreviewDialogPrivate", "Save as Image"); printDeviceCombo->addItems(itemlist); @@ -1293,6 +1293,12 @@ void DPrintPreviewDialogPrivate::initconnections() QObject::connect(copycountspinbox->lineEdit(), SIGNAL(textEdited(const QString &)), q, SLOT(_q_spinboxValueEmptyChecked(const QString &))); QObject::connect(scaleRateEdit->lineEdit(), SIGNAL(textEdited(const QString &)), q, SLOT(_q_spinboxValueEmptyChecked(const QString &))); QObject::connect(inclinatBox->lineEdit(), SIGNAL(textEdited(const QString &)), q, SLOT(_q_spinboxValueEmptyChecked(const QString &))); + + QObject::connect(q, &DPrintPreviewDialog::finished, q, [this]() { + qDebug(dPrintPreview) << "DPrintPreviewDialog finished, clear printerNames"; + printerNames.clear(); + printerNamesInited = false; + }); } void DPrintPreviewDialogPrivate::setfrmaeback(DFrame *frame) @@ -2249,10 +2255,20 @@ void DPrintPreviewDialogPrivate::matchFitablePageSize() } } +QStringList DPrintPreviewDialogPrivate::availablePrinterNames() +{ + if (!printerNamesInited) { + qDebug(dPrintPreview) << "Get printer names from QPrinterInfo."; + printerNamesInited = true; + printerNames = QPrinterInfo::availablePrinterNames(); + qDebug(dPrintPreview) << "Available printer names:" << printerNames; + } + return printerNames; +} + bool DPrintPreviewDialogPrivate::isActualPrinter(const QString &name) { - const QStringList &printerNames = QPrinterInfo::availablePrinterNames(); - return printerNames.contains(name); + return availablePrinterNames().contains(name); } QString DPrintPreviewDialogPrivate::getColorModeConfig(const QString &printer) diff --git a/src/widgets/private/dprintpreviewdialog_p.h b/src/widgets/private/dprintpreviewdialog_p.h index 834b47a3b..f39796293 100644 --- a/src/widgets/private/dprintpreviewdialog_p.h +++ b/src/widgets/private/dprintpreviewdialog_p.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2019 - 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later @@ -92,6 +92,7 @@ class DPrintPreviewDialogPrivate : public DDialogPrivate void setPageLayoutEnable(const bool &checked); void matchFitablePageSize(); bool isActualPrinter(const QString &name); + QStringList availablePrinterNames(); QString getColorModeConfig(const QString &printer); void saveColorModeConfig(const QString &printer, const QString &colorMode); @@ -189,6 +190,8 @@ class DPrintPreviewDialogPrivate : public DDialogPrivate DSpinBox *opaBox = nullptr; QVector marginOldValue; // 记录margin自定义时的旧值 如果旧值和新值一致,就不需要刷新,top left right bottom QList minnumMargins; + QStringList printerNames; + bool printerNamesInited = false; QSpacerItem *spacer = nullptr; QSpacerItem *wmSpacer = nullptr; DFloatingWidget *colorWidget = nullptr;