From 434f5e9cb48029cce9407c0b8150917a825d2628 Mon Sep 17 00:00:00 2001 From: dengzhongyuan365-dev Date: Fri, 13 Nov 2026 16:19:48 +0800 Subject: [PATCH] fix: add AT-SPI accessible names for interactive controls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Add setAccessibleName() to 31 interactive controls across 10 files. 2. Cover compression, extraction, progress, result and settings pages. 3. Name radio buttons, input fields, switches, combos and buttons. Log: Add accessible names for AT-SPI automation support Influence: 1. Launch the app and verify all interactive controls render and respond. 2. Run AT-SPI inspection and confirm 31 controls expose accessible names. 3. Verify compression and extraction flows remain unaffected. fix: 为交互控件补充 AT-SPI 无障碍名称 1. 为 10 个文件中的 31 个交互控件增加 setAccessibleName()。 2. 覆盖压缩、解压、进度、结果及设置等页面。 3. 包含单选框、输入框、开关、下拉框和按钮等控件。 Influence: 1. 启动应用,验证各交互控件显示与交互正常。 2. 使用 AT-SPI 检查工具确认 31 个控件均可获取无障碍名称。 3. 验证压缩、解压等既有流程不受影响。 Log: 补充 AT-SPI 自动化测试所需的控件无障碍名称 PMS: TASK-398535 multica: V-8391 --- src/source/dialog/popupdialog.cpp | 7 ++++++- src/source/dialog/progressdialog.cpp | 3 ++- src/source/dialog/settingdialog.cpp | 5 ++++- src/source/page/compresspage.cpp | 3 ++- src/source/page/compresssettingpage.cpp | 15 ++++++++++++++- src/source/page/failurepage.cpp | 5 ++++- src/source/page/homepage.cpp | 3 ++- src/source/page/progresspage.cpp | 6 +++++- src/source/page/successpage.cpp | 5 ++++- src/source/page/uncompresspage.cpp | 5 ++++- 10 files changed, 47 insertions(+), 10 deletions(-) diff --git a/src/source/dialog/popupdialog.cpp b/src/source/dialog/popupdialog.cpp index fdb51924..52e94842 100644 --- a/src/source/dialog/popupdialog.cpp +++ b/src/source/dialog/popupdialog.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd. +// Copyright (C) 2019 ~ 2026 Uniontech Software Technology Co.,Ltd. // SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -350,8 +350,10 @@ QStringList ConvertDialog::showDialog() DRadioButton *zipBtn = new DRadioButton("ZIP"); zipBtn->setChecked(true); + zipBtn->setAccessibleName("ZipRadioButton"); DRadioButton *_7zBtn = new DRadioButton("7Z"); _7zBtn->setChecked(false); + _7zBtn->setAccessibleName("SevenZRadioButton"); QHBoxLayout *labelLayout = new QHBoxLayout; labelLayout->addStretch(); @@ -481,10 +483,12 @@ int AppendDialog::showDialog(bool bMultiplePassword) // 勾选密码 DCheckBox *pSelCkb = new DCheckBox(tr("Use password"), this); + pSelCkb->setAccessibleName("UsePasswordCheckBox"); DFontSizeManager::instance()->bind(pSelCkb, DFontSizeManager::T6, QFont::Medium); // 密码输入框 DPasswordEdit *pPasswordEdit = new DPasswordEdit(this); + pPasswordEdit->setAccessibleName("PasswordEdit"); pPasswordEdit->lineEdit()->setAttribute(Qt::WA_InputMethodEnabled, false); //隐藏密码时不能输入中文 pPasswordEdit->setFocusPolicy(Qt::StrongFocus); pPasswordEdit->setMinimumHeight(36); @@ -605,6 +609,7 @@ int RenameDialog::showDialog(const QString &strReName, const QString &strAlias, qCDebug(appLog) << "Showing RenameDialog for:" << strReName << "isDirectory:" << isDirectory << "isRepeat:" << isRepeat; if(m_lineEdit == NULL) {//创建DLineEdit,设定显示规则。 m_lineEdit = new DLineEdit(this); + m_lineEdit->setAccessibleName("RenameEdit"); //使用 QValidator 在输入时直接拒绝非法字符,避免在 textChanged 中 setText 导致光标跳动 //第一位不允许空格和特殊字符,后续位不允许特殊字符(中间空格允许) #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) diff --git a/src/source/dialog/progressdialog.cpp b/src/source/dialog/progressdialog.cpp index f4ef3e91..39d63cd0 100644 --- a/src/source/dialog/progressdialog.cpp +++ b/src/source/dialog/progressdialog.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd. +// Copyright (C) 2019 ~ 2026 Uniontech Software Technology Co.,Ltd. // SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -59,6 +59,7 @@ void ProgressDialog::initUI() // 显示进度 m_circleprogress = new DProgressBar(this); + m_circleprogress->setAccessibleName("ProgressDialogBar"); m_circleprogress->setFixedSize(336, 6); m_circleprogress->setValue(0); diff --git a/src/source/dialog/settingdialog.cpp b/src/source/dialog/settingdialog.cpp index 683d5a7b..8193ce35 100644 --- a/src/source/dialog/settingdialog.cpp +++ b/src/source/dialog/settingdialog.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd. +// Copyright (C) 2019 ~ 2026 Uniontech Software Technology Co.,Ltd. // SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -130,8 +130,11 @@ void SettingDialog::createSettingButton() QWidget *buttonwidget = new QWidget(); QHBoxLayout *layout = new QHBoxLayout(); CustomPushButton *selectAllButton = new CustomPushButton(tr("Select All", "button")); + selectAllButton->setAccessibleName("SelectAllButton"); CustomPushButton *cancelSelectButton = new CustomPushButton(tr("Clear All")); + cancelSelectButton->setAccessibleName("ClearAllButton"); CustomSuggestButton *recommendedButton = new CustomSuggestButton(tr("Recommended")); + recommendedButton->setAccessibleName("RecommendedButton"); selectAllButton->setMinimumWidth(153); cancelSelectButton->setMinimumWidth(153); recommendedButton->setMinimumWidth(153); diff --git a/src/source/page/compresspage.cpp b/src/source/page/compresspage.cpp index 40adc2e9..f8beff52 100644 --- a/src/source/page/compresspage.cpp +++ b/src/source/page/compresspage.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd. +// Copyright (C) 2019 ~ 2026 Uniontech Software Technology Co.,Ltd. // SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -77,6 +77,7 @@ void CompressPage::initUI() m_pCompressView = new CompressView(this); m_pNextBtn = new CustomPushButton(tr("Next"), this); m_pNextBtn->setMinimumWidth(340); + m_pNextBtn->setAccessibleName("NextButton"); // 按钮布局 QHBoxLayout *pBtnLayout = new QHBoxLayout; diff --git a/src/source/page/compresssettingpage.cpp b/src/source/page/compresssettingpage.cpp index b8ed2347..17befb5e 100644 --- a/src/source/page/compresssettingpage.cpp +++ b/src/source/page/compresssettingpage.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd. +// Copyright (C) 2019 ~ 2026 Uniontech Software Technology Co.,Ltd. // SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -301,6 +301,19 @@ void CompressSettingPage::initUI() m_pCompressBtn->setMinimumWidth(340); // 设置压缩按钮最小尺寸 + // 设置无障碍名称 + m_pFileNameEdt->setAccessibleName("FileNameEdit"); + m_pSavePathEdt->setAccessibleName("SavePathEdit"); + m_pCompressLevelCmb->setAccessibleName("CompressLevelComboBox"); + m_pAdvancedBtn->setAccessibleName("AdvancedOptionsSwitch"); + m_pPasswordEdt->setAccessibleName("PasswordEdit"); + m_pCpuCmb->setAccessibleName("CpuThreadComboBox"); + m_pListEncryptionBtn->setAccessibleName("ListEncryptionSwitch"); + m_pSplitCkb->setAccessibleName("SplitCheckBox"); + m_pSplitValueEdt->setAccessibleName("SplitValueEdit"); + m_pCommentEdt->setAccessibleName("CommentEdit"); + m_pCompressBtn->setAccessibleName("CompressButton"); + // 左侧布局 QHBoxLayout *pTypeLayout = new QHBoxLayout; // 类型布局 pTypeLayout->addStretch(); diff --git a/src/source/page/failurepage.cpp b/src/source/page/failurepage.cpp index eabd0ab4..c8a13268 100644 --- a/src/source/page/failurepage.cpp +++ b/src/source/page/failurepage.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd. +// Copyright (C) 2019 ~ 2026 Uniontech Software Technology Co.,Ltd. // SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -100,6 +100,9 @@ void FailurePage::initUI() //返回按钮 commandLinkBackButton = new CustomCommandLinkButton(tr("Back"), this); + m_pRetrybutton->setAccessibleName("RetryButton"); + commandLinkBackButton->setAccessibleName("BackButton"); + //界面布局 QVBoxLayout *mainlayout = new QVBoxLayout(this); mainlayout->addStretch(); diff --git a/src/source/page/homepage.cpp b/src/source/page/homepage.cpp index f009b1ed..d89fdebd 100644 --- a/src/source/page/homepage.cpp +++ b/src/source/page/homepage.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd. +// Copyright (C) 2019 ~ 2026 Uniontech Software Technology Co.,Ltd. // SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -44,6 +44,7 @@ void HomePage::initUI() m_pTipLbl = new DLabel(tr("Drag file or folder here"), this); m_pSplitLbl = new DLabel(this); m_pChooseBtn = new CustomCommandLinkButton(tr("Select File"), this); + m_pChooseBtn->setAccessibleName("SelectFileButton"); m_pSettings = new QSettings(QDir(UiTools::getConfigPath()).filePath("config.conf"), QSettings::IniFormat, this); // 初始化控件布局 diff --git a/src/source/page/progresspage.cpp b/src/source/page/progresspage.cpp index f28cfaeb..78577924 100644 --- a/src/source/page/progresspage.cpp +++ b/src/source/page/progresspage.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd. +// Copyright (C) 2019 ~ 2026 Uniontech Software Technology Co.,Ltd. // SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -224,6 +224,10 @@ void ProgressPage::initUI() m_pCancelBtn = new CustomPushButton(tr("Cancel", "button"), this); m_pPauseContinueButton = new CustomSuggestButton(tr("Pause", "button"), this); + m_pProgressBar->setAccessibleName("ProgressBar"); + m_pCancelBtn->setAccessibleName("CancelButton"); + m_pPauseContinueButton->setAccessibleName("PauseContinueButton"); + // 初始化压缩包名称样式 DFontSizeManager::instance()->bind(m_pArchiveNameLbl, DFontSizeManager::T5, QFont::DemiBold); m_pArchiveNameLbl->setForegroundRole(DPalette::ToolTipText); diff --git a/src/source/page/successpage.cpp b/src/source/page/successpage.cpp index 01a00eef..c9f0e923 100644 --- a/src/source/page/successpage.cpp +++ b/src/source/page/successpage.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd. +// Copyright (C) 2019 ~ 2026 Uniontech Software Technology Co.,Ltd. // SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -83,6 +83,9 @@ void SuccessPage::initUI() //返回按钮 m_pReturnBtn = new CustomCommandLinkButton(tr("Back"), this); + m_pShowFileBtn->setAccessibleName("ViewFileButton"); + m_pReturnBtn->setAccessibleName("BackButton"); + //界面布局 QVBoxLayout *mainlayout = new QVBoxLayout(this); mainlayout->addStretch(); diff --git a/src/source/page/uncompresspage.cpp b/src/source/page/uncompresspage.cpp index 1fd5766d..a54c5600 100644 --- a/src/source/page/uncompresspage.cpp +++ b/src/source/page/uncompresspage.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2019 ~ 2020 Uniontech Software Technology Co.,Ltd. +// Copyright (C) 2019 ~ 2026 Uniontech Software Technology Co.,Ltd. // SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later @@ -117,6 +117,9 @@ void UnCompressPage::initUI() m_pUncompressPathBtn = new CustomCommandLinkButton(tr("Extract to:") + " ~/Desktop", this); m_pUnCompressBtn = new CustomPushButton(tr("Extract", "button"), this); + m_pUncompressPathBtn->setAccessibleName("ExtractPathButton"); + m_pUnCompressBtn->setAccessibleName("ExtractButton"); + m_pUncompressPathBtn->setToolTip(m_strUnCompressPath); DFontSizeManager::instance()->bind(m_pUncompressPathBtn, DFontSizeManager::T8);