#include "batchconvertpage.h" #include #include #include #include #include #include #include BatchConvertPage::BatchConvertPage(QWidget *parent) : QWidget(parent) { initUI(); } BatchConvertPage::~BatchConvertPage() { } void BatchConvertPage::initUI() { QVBoxLayout *layout = new QVBoxLayout(this); layout->setContentsMargins(30, 30, 30, 30); layout->setSpacing(20); QGroupBox *funcBox = new QGroupBox("转码功能"); QVBoxLayout *funcLayout = new QVBoxLayout(funcBox); funcLayout->setSpacing(10); QLabel *funcLabel = new QLabel("请输入需要转码的功能名称(每行一个):"); funcLayout->addWidget(funcLabel); m_funcEdit = new QTextEdit; m_funcEdit->setPlaceholderText(""); m_funcEdit->setMinimumHeight(120); funcLayout->addWidget(m_funcEdit); layout->addWidget(funcBox); QHBoxLayout *btnLayout = new QHBoxLayout; QPushButton *startBtn = new QPushButton("开始转换"); startBtn->setStyleSheet("background-color: #1abc9c; color: white; padding: 10px 30px; font-size: 14px; border: none; border-radius: 4px;"); connect(startBtn, &QPushButton::clicked, this, &BatchConvertPage::onStartConvert); QPushButton *clearBtn = new QPushButton("清空"); connect(clearBtn, &QPushButton::clicked, this, &BatchConvertPage::onClearLog); btnLayout->addStretch(); btnLayout->addWidget(startBtn); btnLayout->addWidget(clearBtn); layout->addLayout(btnLayout); m_logEdit = new QTextEdit; m_logEdit->setReadOnly(true); m_logEdit->setStyleSheet("background-color: #2c3e50; color: #ecf0f1;"); m_logEdit->append("转码工具已准备就绪..."); layout->addWidget(m_logEdit); } bool BatchConvertPage::saveToCustJson(const QStringList &funcList) { QString jsonPath = QCoreApplication::applicationDirPath() + "/uf2touft3/cust.json"; QFile file(jsonPath); if (!file.open(QIODevice::ReadOnly)) { m_logEdit->append("[ERROR] 无法打开文件: " + jsonPath); return false; } QByteArray data = file.readAll(); file.close(); QString content = QString::fromUtf8(data); int dirStart = content.indexOf("\"dir\":["); if (dirStart < 0) { dirStart = content.indexOf("\"dir\" : ["); } if (dirStart < 0) { m_logEdit->append("[ERROR] 未找到 \"dir\" 节点"); return false; } int arrayStart = content.indexOf('[', dirStart); int bracketCount = 1; int pos = arrayStart + 1; while (pos < content.length() && bracketCount > 0) { if (content[pos] == '[') bracketCount++; else if (content[pos] == ']') bracketCount--; pos++; } int arrayEnd = pos; QString newDirArray = "["; for (int i = 0; i < funcList.size(); ++i) { if (i > 0) newDirArray += ","; newDirArray += "\n \"" + funcList[i] + ".service_design\""; } newDirArray += "\n ]"; content.replace(arrayStart, arrayEnd - arrayStart, newDirArray); if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { m_logEdit->append("[ERROR] 无法写入文件: " + jsonPath); return false; } file.write(content.toUtf8()); file.close(); return true; } void BatchConvertPage::onStartConvert() { QString funcText = m_funcEdit->toPlainText().trimmed(); if (funcText.isEmpty()) { m_logEdit->append("请输入需要转码的功能名称!"); return; } QStringList funcs = funcText.split('\n', Qt::SkipEmptyParts); QStringList trimmedFuncs; for (const QString &func : funcs) { QString trimmed = func.trimmed(); if (!trimmed.isEmpty()) { trimmedFuncs.append(trimmed); } } if (trimmedFuncs.isEmpty()) { m_logEdit->append("请输入有效的功能名称!"); return; } m_logEdit->append("========================================"); m_logEdit->append("正在写入 cust.json ..."); m_logEdit->append("功能列表:"); for (const QString &func : trimmedFuncs) { m_logEdit->append(" - " + func + ".service_design"); } if (saveToCustJson(trimmedFuncs)) { m_logEdit->append("[OK] cust.json 写入成功!"); } else { m_logEdit->append("[FAIL] cust.json 写入失败!"); m_logEdit->append("========================================"); return; } m_logEdit->append("========================================"); emit startConvert(); } void BatchConvertPage::onClearLog() { m_logEdit->clear(); m_logEdit->append("转码工具已准备就绪..."); }