From 918cf5ac975e64b1616dd33e17e12590645d2b6e Mon Sep 17 00:00:00 2001 From: yeshanshan Date: Wed, 26 Aug 2026 16:45:55 +0800 Subject: [PATCH] fix: adapt to Qt6 DCheckBox API changes in preview dialog MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Update sidebysideCheckBox signal lambda to use Qt::CheckState type in Qt6 builds 2. Replace deprecated SIGNAL/SLOT syntax for duplexCheckBox with member function pointer and lambda wrapping 3. Use Qt::Unchecked enum constant instead of numeric literal 0 for better readability 4. Simplify settings widget factory checkbox connection by using isChecked() instead of state parameter This change ensures compatibility with Qt6 where DCheckBox::checkStateChanged emits Qt::CheckState instead of int, preventing build failures and maintaining runtime behavior across Qt5/ Qt6. Log: Fixed Qt6 compatibility issues with checkbox state handling in print preview dialog Influence: 1. Test print preview dialog page setup options in Qt6 builds 2. Verify side-by-side printing checkbox toggles sequential print option correctly 3. Test duplex printing checkbox state changes trigger margin settings update 4. Verify check/uncheck state transitions work in both Qt5 and Qt6 5. Test settings widget checkbox option updates value correctly on toggle 6. Regression test all printer-related UI controls in preview dialog fix: 适配预览对话框中的Qt6 DCheckBox API变更 1. 更新sidebysideCheckBox信号lambda以在Qt6构建中使用Qt::CheckState类型 2. 将duplexCheckBox的废弃SIGNAL/SLOT语法替换为成员函数指针配合lambda封装 3. 使用Qt::Unchecked枚举常量替代数字字面量0以提高代码可读性 4. 简化设置控件工厂的复选框连接,改用isChecked()替代状态参数 此变更确保Qt6兼容性,因为Qt6中DCheckBox::checkStateChanged发出 Qt::CheckState而非int,避免构建失败并在Qt5/Qt6间维持运行行为。 Log: 修复打印预览对话框中复选框状态处理的Qt6兼容性问题 Influence: 1. 在Qt6构建中测试打印预览对话框页面设置选项 2. 验证并排打印复选框切换顺序打印选项功能正常 3. 测试双面打印复选框状态变化触发页边距设置更新 4. 在Qt5和Qt6中验证选中/取消选中状态转换 5. 测试设置控件复选框选项切换时正确更新值 6. 回归测试预览对话框中所有与打印机相关的UI控件 --- src/widgets/dprintpreviewdialog.cpp | 7 ++++--- src/widgets/dsettingswidgetfactory.cpp | 6 +++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/widgets/dprintpreviewdialog.cpp b/src/widgets/dprintpreviewdialog.cpp index 840bc60c4..813f99c12 100644 --- a/src/widgets/dprintpreviewdialog.cpp +++ b/src/widgets/dprintpreviewdialog.cpp @@ -1155,11 +1155,11 @@ void DPrintPreviewDialogPrivate::initconnections() } }); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - QObject::connect(sidebysideCheckBox, &DCheckBox::checkStateChanged, q, [this](int status) { + QObject::connect(sidebysideCheckBox, &DCheckBox::checkStateChanged, q, [this](Qt::CheckState status) { #else QObject::connect(sidebysideCheckBox, &DCheckBox::stateChanged, q, [this](int status) { #endif - if (status == 0) { + if (status == Qt::Unchecked) { if (isActualPrinter(printDeviceCombo->currentText())) settingHelper->setSubControlEnabled(DPrintPreviewSettingInterface::SC_PageOrder_SequentialPrint, true); setPageLayoutEnable(false); @@ -1268,7 +1268,8 @@ void DPrintPreviewDialogPrivate::initconnections() QObject::connect(marginLeftSpin, SIGNAL(valueChanged(double)), q, SLOT(_q_marginspinChanged(double))); QObject::connect(marginBottomSpin, SIGNAL(valueChanged(double)), q, SLOT(_q_marginspinChanged(double))); #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - QObject::connect(duplexCheckBox, SIGNAL(checkStateChanged(int)), q, SLOT(_q_checkStateChanged(int))); + QObject::connect(duplexCheckBox, &DCheckBox::checkStateChanged, q, + [this](Qt::CheckState state) { _q_checkStateChanged(int(state)); }); #else QObject::connect(duplexCheckBox, SIGNAL(stateChanged(int)), q, SLOT(_q_checkStateChanged(int))); #endif diff --git a/src/widgets/dsettingswidgetfactory.cpp b/src/widgets/dsettingswidgetfactory.cpp index 9f30fec01..4ea13de06 100644 --- a/src/widgets/dsettingswidgetfactory.cpp +++ b/src/widgets/dsettingswidgetfactory.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2016 - 2022 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2016 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later @@ -275,8 +275,8 @@ QPair createCheckboxOptionHandle(QObject *opt) #else option->connect(rightWidget, &QCheckBox::stateChanged, #endif - option, [ = ](int status) { - option->setValue(status == Qt::Checked); + option, [ = ] { + option->setValue(rightWidget->isChecked()); }); option->connect(option, &DTK_CORE_NAMESPACE::DSettingsOption::valueChanged, rightWidget, [ = ](const QVariant & value) {