From b2ad6137705767539cead235e8c27e07ec98329d Mon Sep 17 00:00:00 2001 From: dengzhongyuan Date: Tue, 2 Dec 2025 18:45:45 +0800 Subject: [PATCH] fix: Hide language selector when using OCR V5 plugin - Added isV5() method to OCREngine to check if V5 plugin is loaded - Set m_isV5 flag when OCR V5 plugin loads successfully - Hide language selection UI when V5 plugin is active, use default language instead - Fixed code style: adjusted if-else formatting for consistency - Added bounds checking for language index map lookup Log: Hide language selector for OCR V5 plugin bug: https://pms.uniontech.com/bug-view-342351.html --- src/engine/OCREngine.cpp | 6 +-- src/engine/OCREngine.h | 6 +++ src/mainwidget.cpp | 87 ++++++++++++++++++++++------------------ 3 files changed, 57 insertions(+), 42 deletions(-) diff --git a/src/engine/OCREngine.cpp b/src/engine/OCREngine.cpp index a372020..8333c08 100644 --- a/src/engine/OCREngine.cpp +++ b/src/engine/OCREngine.cpp @@ -35,11 +35,11 @@ OCREngine::OCREngine() auto plugins = ocrDriver->installedPluginNames(); if (plugins.contains(ocrV5, Qt::CaseInsensitive)) { - if(ocrDriver->loadPlugin(ocrV5)) { + if (ocrDriver->loadPlugin(ocrV5)) { load = true; + m_isV5 = true; qCInfo(dmOcr) << "OCR V5 plugin loaded"; - } - else { + } else { qCWarning(dmOcr) << "Failed to load OCR V5 plugin"; } } diff --git a/src/engine/OCREngine.h b/src/engine/OCREngine.h index a2523cc..d93f3f5 100644 --- a/src/engine/OCREngine.h +++ b/src/engine/OCREngine.h @@ -26,6 +26,11 @@ class OCREngine return m_isRunning; } + bool isV5() const + { + return m_isV5; + } + bool setLanguage(const QString &language); void setImage(const QImage &image); QString getRecogitionResult(); @@ -43,4 +48,5 @@ class OCREngine Dtk::Ocr::DOcr *ocrDriver; std::atomic_bool m_isRunning; QSettings *ocrSetting; + bool m_isV5 {false}; }; diff --git a/src/mainwidget.cpp b/src/mainwidget.cpp index 1856061..c1a63ff 100644 --- a/src/mainwidget.cpp +++ b/src/mainwidget.cpp @@ -172,47 +172,56 @@ void MainWidget::setupUi(QWidget *Widget) //配置文件读写 ocrSetting = new QSettings(Dtk::Core::DStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/config.conf", QSettings::IniFormat); - //语种读写设置 - //目前仅支持默认插件,默认插件支持的语种字符串:zh-Hans_en,zh-Hant_en,en - auto currentLanguage = ocrSetting->value("language", "zh-Hans_en").toString(); - OCREngine::instance()->setLanguage(currentLanguage); - - //设置语种选择框 - auto recLabel = new DLabel(tr("Recognize language")); - languageSelectBox = new DComboBox(this); - languageSelectBox->setFixedSize(160, 36); - languageSelectBox->addItems({tr("Simplified Chinese"), tr("English"), tr("Traditional Chinese")}); - static std::map languageIndexMap{ {"zh-Hans_en", 0}, - {"en", 1}, - {"zh-Hant_en", 2} - }; - languageSelectBox->setCurrentIndex(languageIndexMap[currentLanguage]); - connect(languageSelectBox, static_cast(&DComboBox::currentIndexChanged), [this](int index) { - QString resultLanguage; - switch(index) { - default: - resultLanguage = "zh-Hans_en"; - break; - case 0: - resultLanguage = "zh-Hans_en"; - break; - case 1: - resultLanguage = "en"; - break; - case 2: - resultLanguage = "zh-Hant_en"; - break; - }; - if(!OCREngine::instance()->setLanguage(resultLanguage)) { - return; + // 使用 V5 插件时,不显示语言选择控件,只设置一次默认语言 + if (OCREngine::instance()->isV5()) { + OCREngine::instance()->setLanguage("zh-Hans_en"); + } else { + //语种读写设置 + //目前仅支持默认插件,默认插件支持的语种字符串:zh-Hans_en,zh-Hant_en,en + auto currentLanguage = ocrSetting->value("language", "zh-Hans_en").toString(); + OCREngine::instance()->setLanguage(currentLanguage); + + //设置语种选择框 + auto recLabel = new DLabel(tr("Recognize language")); + languageSelectBox = new DComboBox(this); + languageSelectBox->setFixedSize(160, 36); + languageSelectBox->addItems({tr("Simplified Chinese"), tr("English"), tr("Traditional Chinese")}); + static std::map languageIndexMap{ {"zh-Hans_en", 0}, + {"en", 1}, + {"zh-Hant_en", 2} + }; + if (languageIndexMap.find(currentLanguage) != languageIndexMap.end()) { + languageSelectBox->setCurrentIndex(languageIndexMap[currentLanguage]); + } else { + languageSelectBox->setCurrentIndex(0); } - ocrSetting->setValue("language", resultLanguage); - runRec(false); - m_noResult->setVisible(false); - }); + connect(languageSelectBox, static_cast(&DComboBox::currentIndexChanged), [this](int index) { + QString resultLanguage; + switch(index) { + default: + resultLanguage = "zh-Hans_en"; + break; + case 0: + resultLanguage = "zh-Hans_en"; + break; + case 1: + resultLanguage = "en"; + break; + case 2: + resultLanguage = "zh-Hant_en"; + break; + }; + if(!OCREngine::instance()->setLanguage(resultLanguage)) { + return; + } + ocrSetting->setValue("language", resultLanguage); + runRec(false); + m_noResult->setVisible(false); + }); - m_buttonHorizontalLayout->addWidget(recLabel, 0, Qt::AlignRight); - m_buttonHorizontalLayout->addWidget(languageSelectBox, 0, Qt::AlignRight); + m_buttonHorizontalLayout->addWidget(recLabel, 0, Qt::AlignRight); + m_buttonHorizontalLayout->addWidget(languageSelectBox, 0, Qt::AlignRight); + } m_copyBtn = new DIconButton(Widget); m_copyBtn->setObjectName(QStringLiteral("Copy text"));