修复了json editdialog保存无效
This commit is contained in:
@@ -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<CircularSwitch*>(widget);
|
||||
if (switchBtn) {
|
||||
result = switchBtn->isChecked();
|
||||
return true;
|
||||
}
|
||||
errorMsg = "布尔值控件类型错误";
|
||||
return false;
|
||||
}
|
||||
case JsonValueType::Number: {
|
||||
QDoubleSpinBox* spinBox = qobject_cast<QDoubleSpinBox*>(widget);
|
||||
if (spinBox) {
|
||||
// 检查是否为整数
|
||||
double value = spinBox->value();
|
||||
if (spinBox->decimals() == 0 && value == floor(value)) {
|
||||
result = static_cast<int64_t>(value);
|
||||
}
|
||||
else {
|
||||
if (it != m_editorWidgets.end()) {
|
||||
// 有专用编辑器控件
|
||||
QWidget* widget = it->second;
|
||||
switch (expectedType) {
|
||||
case JsonValueType::Boolean: {
|
||||
CircularSwitch* switchBtn = qobject_cast<CircularSwitch*>(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<QLineEdit*>(widget);
|
||||
if (lineEdit) {
|
||||
result = lineEdit->text().trimmed().toStdString();
|
||||
return true;
|
||||
case JsonValueType::Number: {
|
||||
QDoubleSpinBox* spinBox = qobject_cast<QDoubleSpinBox*>(widget);
|
||||
if (spinBox) {
|
||||
double value = spinBox->value();
|
||||
// 检查是否为整数
|
||||
if (spinBox->decimals() == 0 && value == floor(value)) {
|
||||
result = static_cast<int64_t>(value);
|
||||
updateModelData(key, QString::number(static_cast<int64_t>(value)));
|
||||
}
|
||||
else {
|
||||
result = value;
|
||||
updateModelData(key, QString::number(value));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
errorMsg = "数字控件类型错误";
|
||||
return false;
|
||||
}
|
||||
case JsonValueType::String: {
|
||||
QLineEdit* lineEdit = qobject_cast<QLineEdit*>(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) {
|
||||
//查找键对应的行
|
||||
|
||||
Reference in New Issue
Block a user