From f75815537ac2bb898d617c8a6ef46a9c494474be Mon Sep 17 00:00:00 2001 From: Liu Zhangjian Date: Mon, 14 Oct 2024 17:51:59 +0800 Subject: [PATCH] fix: [shortcut] Fix shortcut key import issue When the imported shortcut key has a format problem, the shortcut key is displayed incorrectly Log: fix bug Bug: https://pms.uniontech.com/bug-view-277815.html --- .../mainframe/shortcutsettingwidget.cpp | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/plugins/option/optioncore/mainframe/shortcutsettingwidget.cpp b/src/plugins/option/optioncore/mainframe/shortcutsettingwidget.cpp index 56b279712..aea0f7c19 100644 --- a/src/plugins/option/optioncore/mainframe/shortcutsettingwidget.cpp +++ b/src/plugins/option/optioncore/mainframe/shortcutsettingwidget.cpp @@ -230,10 +230,17 @@ void ShortcutSettingWidgetPrivate::updateShortcut(QTreeWidgetItem *item, const Q if (!scItem) return; - setModified(item, scItem->cmd->defaultKeySequences() != keyList); - scItem->shortcutKeys = keyList; + // remove empty QKeySequence + QList tmpKeyList = keyList; + auto iter = std::remove_if(tmpKeyList.begin(), tmpKeyList.end(), [](const QKeySequence &key) { + return key.isEmpty(); + }); + tmpKeyList.erase(iter, tmpKeyList.end()); + + setModified(item, scItem->cmd->defaultKeySequences() != tmpKeyList); + scItem->shortcutKeys = tmpKeyList; commandWidget->removeItemWidget(item, 2); - if (keyList.isEmpty()) { + if (tmpKeyList.isEmpty()) { item->setText(2, ""); return; } @@ -385,14 +392,17 @@ void ShortcutSettingWidgetPrivate::importAction() const QVariant v = settings.value(key); if (QMetaType::Type(v.type()) == QMetaType::QStringList) { auto list = v.toStringList(); - QList keySequenceList; - std::transform(list.begin(), list.end(), std::back_inserter(keySequenceList), - [](const QString &s) { - return QKeySequence::fromString(s); - }); - mapping.insert(key, keySequenceList); + for (const auto &str : list) { + auto shortcut = QKeySequence::fromString(str); + if (!shortcut.isEmpty() && shortcut.toString().isEmpty()) + continue; + mapping[key] << shortcut; + } } else { - mapping.insert(key, { QKeySequence::fromString(v.toString()) }); + auto shortcut = QKeySequence::fromString(v.toString()); + if (!shortcut.isEmpty() && shortcut.toString().isEmpty()) + continue; + mapping[key] << shortcut; } } settings.endGroup();