diff --git a/src/launcher/GUI/JsonEditorDialog.h b/src/launcher/GUI/JsonEditorDialog.h index 4ed8226..666ab67 100644 --- a/src/launcher/GUI/JsonEditorDialog.h +++ b/src/launcher/GUI/JsonEditorDialog.h @@ -136,7 +136,15 @@ public: JsonValueType valueType = getJsonValueType(value); m_originalTypes[key] = valueType; - // 设置值 + ////为所有类型都创建数据项 + //QString valueText = formatValueForDisplay(value, valueType); + //QStandardItem* valueItem = new QStandardItem(valueText); + //valueItem->setToolTip(generateTypeHint(valueType)); + //valueItem->setBackground(QColor(60, 60, 60)); + //valueItem->setForeground(QColor(255, 255, 255)); + //m_tableModel->setItem(row, 1, valueItem); + + //为特定类型创建专用编辑器控件 QWidget* editorWidget = createEditorWidget(value, valueType); if (editorWidget) { m_tableView->setIndexWidget(m_tableModel->index(row, 1), editorWidget); @@ -192,6 +200,8 @@ private slots: result[keyStd] = convertedValue; } + qDebug() << "Result JSON: " << QString::fromStdString(result.dump(4)); + emit jsonAccepted(result); accept(); } @@ -240,54 +250,62 @@ private: } } - // 从编辑器控件获取值并验证 - bool getValueFromEditor(const std::string& key, JsonValueType expectedType, - nlohmann::json& result, QString& errorMsg) { + bool getValueFromEditor(const std::string& key, JsonValueType expectedType, nlohmann::json& result, QString& errorMsg) { auto it = m_editorWidgets.find(key); - if (it == m_editorWidgets.end()) { - // 没有编辑器控件,使用默认文本处理 - return validateAndConvertValue(getTextFromCell(key), expectedType, result, errorMsg); - } - QWidget* widget = it->second; try { - switch (expectedType) { - case JsonValueType::Boolean: { - CircularSwitch* switchBtn = qobject_cast(widget); - if (switchBtn) { - result = switchBtn->isChecked(); - return true; - } - errorMsg = "布尔值控件类型错误"; - return false; - } - case JsonValueType::Number: { - QDoubleSpinBox* spinBox = qobject_cast(widget); - if (spinBox) { - // 检查是否为整数 - double value = spinBox->value(); - if (spinBox->decimals() == 0 && value == floor(value)) { - result = static_cast(value); - } - else { + if (it != m_editorWidgets.end()) { + // 有专用编辑器控件 + QWidget* widget = it->second; + switch (expectedType) { + case JsonValueType::Boolean: { + CircularSwitch* switchBtn = qobject_cast(widget); + if (switchBtn) { + bool value = switchBtn->isChecked(); result = value; + // 更新模型数据 + updateModelData(key, value ? "true" : "false"); + return true; } - return true; + errorMsg = "布尔值控件类型错误"; + return false; } - errorMsg = "数字控件类型错误"; - return false; - } - case JsonValueType::String: { - QLineEdit* lineEdit = qobject_cast(widget); - if (lineEdit) { - result = lineEdit->text().trimmed().toStdString(); - return true; + case JsonValueType::Number: { + QDoubleSpinBox* spinBox = qobject_cast(widget); + if (spinBox) { + double value = spinBox->value(); + // 检查是否为整数 + if (spinBox->decimals() == 0 && value == floor(value)) { + result = static_cast(value); + updateModelData(key, QString::number(static_cast(value))); + } + else { + result = value; + updateModelData(key, QString::number(value)); + } + return true; + } + errorMsg = "数字控件类型错误"; + return false; + } + case JsonValueType::String: { + QLineEdit* lineEdit = qobject_cast(widget); + if (lineEdit) { + QString value = lineEdit->text().trimmed(); + result = value.toStdString(); + updateModelData(key, value); + return true; + } + errorMsg = "字符串控件类型错误"; + return false; + } + default: + // 其他类型使用默认文本处理 + return validateAndConvertValue(getTextFromCell(key), expectedType, result, errorMsg); } - errorMsg = "字符串控件类型错误"; - return false; } - default: - // 其他类型使用默认文本处理 + else { + // 没有专用编辑器控件,使用默认文本处理 return validateAndConvertValue(getTextFromCell(key), expectedType, result, errorMsg); } } @@ -297,6 +315,20 @@ private: } } + // 更新模型中的数据项 + void updateModelData(const std::string& key, const QString& value) { + for (int row = 0; row < m_tableModel->rowCount(); ++row) { + QStandardItem* keyItem = m_tableModel->item(row, 0); + if (keyItem && keyItem->text().toStdString() == key) { + QStandardItem* valueItem = m_tableModel->item(row, 1); + if (valueItem) { + valueItem->setText(value); + } + break; + } + } + } + // 从单元格获取文本值(用于没有专用编辑器的类型) QString getTextFromCell(const std::string& key) { //查找键对应的行