From aa1bb4246748e58f62cacc777a7af41ad15f3378 Mon Sep 17 00:00:00 2001 From: taocong Date: Wed, 27 May 2026 09:40:44 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E8=AE=BE=E7=BD=AE=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E5=8F=8A=E4=BF=9D=E5=AD=98=E9=85=8D=E7=BD=AE=E5=90=8E?= =?UTF-8?q?=E4=B9=B1=E7=A0=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Uft30ChangeCode.pro | 4 ++ src/pages/settings/settingspage.cpp | 102 ++++++++++++++-------------- src/pages/settings/settingspage.h | 1 + 3 files changed, 55 insertions(+), 52 deletions(-) diff --git a/Uft30ChangeCode.pro b/Uft30ChangeCode.pro index 4af9ea4..087a85d 100644 --- a/Uft30ChangeCode.pro +++ b/Uft30ChangeCode.pro @@ -11,6 +11,8 @@ SOURCES += main.cpp \ src/pages/about/aboutpage.cpp \ src/pages/batchconvert/batchconvertpage.cpp \ src/pages/functionsearch/functionsearchpage.cpp \ + src/pages/functionsearch/uf20functionsearchpage.cpp \ + src/pages/functionsearch/uft3functionsearchpage.cpp \ src/pages/help/helppage.cpp \ src/pages/settings/settingspage.cpp \ src/utils/datacache.cpp \ @@ -23,6 +25,8 @@ HEADERS += src/mainwindow/mainwindow.h \ src/pages/about/aboutpage.h \ src/pages/batchconvert/batchconvertpage.h \ src/pages/functionsearch/functionsearchpage.h \ + src/pages/functionsearch/uf20functionsearchpage.h \ + src/pages/functionsearch/uft3functionsearchpage.h \ src/pages/help/helppage.h \ src/pages/settings/settingspage.h \ src/utils/datacache.h \ diff --git a/src/pages/settings/settingspage.cpp b/src/pages/settings/settingspage.cpp index 89ad8ba..4153521 100644 --- a/src/pages/settings/settingspage.cpp +++ b/src/pages/settings/settingspage.cpp @@ -147,6 +147,12 @@ QString SettingsPage::getConfigIniPath() return QCoreApplication::applicationDirPath() + "/uf2touft3/config.ini"; } +bool SettingsPage::isValidUtf8(const QByteArray &data) +{ + QString test = QString::fromUtf8(data); + return test.toUtf8() == data; +} + void SettingsPage::loadFromConfigIni() { QString iniPath = getConfigIniPath(); @@ -162,7 +168,12 @@ void SettingsPage::loadFromConfigIni() QByteArray data = file.readAll(); file.close(); - QString content = QString::fromLocal8Bit(data); + QString content; + if (isValidUtf8(data)) { + content = QString::fromUtf8(data); + } else { + content = QString::fromLocal8Bit(data); + } bool inProjectPath = false; const QStringList lines = content.split('\n'); @@ -195,12 +206,18 @@ void SettingsPage::saveToConfigIni() QString iniPath = getConfigIniPath(); QString content; + bool isUtf8 = true; if (QFile::exists(iniPath)) { QFile file(iniPath); if (file.open(QIODevice::ReadOnly)) { QByteArray data = file.readAll(); file.close(); - content = QString::fromLocal8Bit(data); + isUtf8 = isValidUtf8(data); + if (isUtf8) { + content = QString::fromUtf8(data); + } else { + content = QString::fromLocal8Bit(data); + } } } @@ -213,53 +230,39 @@ void SettingsPage::saveToConfigIni() QString ufAcct20Val = toWinPath(m_uf20AccountPathEdit->text()); QString createPathVal = toWinPath(m_outputPathEdit->text()); - bool foundSection = false; - QStringList lines = content.split('\n'); + bool inProjectPath = false; QStringList newLines; QSet updatedKeys; - bool alreadyHadProjectPath = false; - for (const QString &rawLine : lines) { - QString line = rawLine; - QString trimmed = rawLine.trimmed(); + QStringList lines = content.split('\n'); + for (int i = 0; i < lines.size(); ++i) { + QString line = lines[i]; + QString trimmed = line.trimmed(); if (trimmed.startsWith('[')) { - if (foundSection) { - for (const QString &k : QStringList{"uft30", "uf20", "ufAcct20", "createPath"}) { - if (!updatedKeys.contains(k)) { - QString val; - if (k == "uft30") val = uft30Val; - else if (k == "uf20") val = uf20Val; - else if (k == "ufAcct20") val = ufAcct20Val; - else if (k == "createPath") val = createPathVal; - newLines << (k + "=" + val); - updatedKeys.insert(k); - } - } - foundSection = false; - } - if (trimmed == "[projectPath]") { - if (alreadyHadProjectPath) { - continue; - } - alreadyHadProjectPath = true; - foundSection = true; - } + inProjectPath = (trimmed == "[projectPath]"); newLines << line; continue; } - if (foundSection && !trimmed.isEmpty() && !trimmed.startsWith(';') && !trimmed.startsWith('#')) { + if (inProjectPath && !trimmed.isEmpty() && !trimmed.startsWith(';') && !trimmed.startsWith('#')) { int eqPos = trimmed.indexOf('='); if (eqPos > 0) { QString key = trimmed.left(eqPos).trimmed(); - if (key == "uft30" || key == "uf20" || key == "ufAcct20" || key == "createPath") { - QString val; - if (key == "uft30") val = uft30Val; - else if (key == "uf20") val = uf20Val; - else if (key == "ufAcct20") val = ufAcct20Val; - else if (key == "createPath") val = createPathVal; - newLines << (key + "=" + val); + if (key == "uft30") { + newLines << ("uft30=" + uft30Val); + updatedKeys.insert(key); + continue; + } else if (key == "uf20") { + newLines << ("uf20=" + uf20Val); + updatedKeys.insert(key); + continue; + } else if (key == "ufAcct20") { + newLines << ("ufAcct20=" + ufAcct20Val); + updatedKeys.insert(key); + continue; + } else if (key == "createPath") { + newLines << ("createPath=" + createPathVal); updatedKeys.insert(key); continue; } @@ -269,19 +272,11 @@ void SettingsPage::saveToConfigIni() newLines << line; } - if (foundSection) { - for (const QString &k : QStringList{"uft30", "uf20", "ufAcct20", "createPath"}) { - if (!updatedKeys.contains(k)) { - QString val; - if (k == "uft30") val = uft30Val; - else if (k == "uf20") val = uf20Val; - else if (k == "ufAcct20") val = ufAcct20Val; - else if (k == "createPath") val = createPathVal; - newLines << (k + "=" + val); - } + bool hasProjectPath = content.contains("[projectPath]"); + if (!hasProjectPath) { + if (!newLines.isEmpty() && !newLines.last().isEmpty()) { + newLines << ""; } - } else { - newLines << ""; newLines << "[projectPath]"; newLines << ("uft30=" + uft30Val); newLines << ("uf20=" + uf20Val); @@ -291,7 +286,12 @@ void SettingsPage::saveToConfigIni() QFile outFile(iniPath); if (outFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) { - QByteArray outData = newLines.join("\n").toLocal8Bit(); + QByteArray outData; + if (isUtf8) { + outData = newLines.join("\n").toUtf8(); + } else { + outData = newLines.join("\n").toLocal8Bit(); + } outFile.write(outData); outFile.close(); } @@ -361,7 +361,5 @@ void SettingsPage::onSelectOutputPath() void SettingsPage::onThemeChanged(int index) { - // 这里可以添加主题切换的逻辑 Q_UNUSED(index); - // 暂时只保存设置,切换效果可以在后续实现 } diff --git a/src/pages/settings/settingspage.h b/src/pages/settings/settingspage.h index 02aa559..f352883 100644 --- a/src/pages/settings/settingspage.h +++ b/src/pages/settings/settingspage.h @@ -30,6 +30,7 @@ private: void saveToConfigIni(); void loadFromConfigIni(); QString getConfigIniPath(); + bool isValidUtf8(const QByteArray &data); QLineEdit *m_uft30PathEdit; QLineEdit *m_uf20PathEdit;