#include "CFDStructDataManagerBase.h" CFDStructDataManagerBase::CFDStructDataManagerBase(QObject *parent) : QObject(parent) { m_cuiSigsCenter = CUISigsCenter::getInstance(); } CFDStructDataManagerBase::~CFDStructDataManagerBase() { if (m_uiConfig != nullptr) { delete m_uiConfig; m_uiConfig = nullptr; } } CUIConfig *CFDStructDataManagerBase::getParamUIConfig() { return nullptr; } // 写入json void jsonAdd(rapidjson::Document& document, QVariant value, QVector path) { using namespace rapidjson; // 获取分配器 Document::AllocatorType& allocator = document.GetAllocator(); // 递归地创建路径中的对象 Value* current = &document; for (int i = 0; i < path.size(); ++i) { // const std::string& key = path[i]; QVariant key = path.at(i); // 如果到了最后一层路径,设置值 if (i == path.size() - 1) { if(key.type() == QVariant::String) { //如果是路径 // 检查路径末尾是否存在 if (current->HasMember(key.toString().toStdString().c_str())) { if(value.type() == QVariant::Int) (*current)[key.toString().toStdString().c_str()].SetInt(value.toInt()); // 如果存在则替换 if(value.type() == QVariant::Double) (*current)[key.toString().toStdString().c_str()].SetDouble(value.toDouble()); // 如果存在则替换 if(value.type() == QVariant::String) (*current)[key.toString().toStdString().c_str()].SetString(value.toString().toStdString().c_str(),allocator); // 如果存在则替换 } else { if(value.type() == QVariant::Int) current->AddMember(Value().SetString(key.toString().toStdString().c_str(), allocator), Value().SetInt(value.toInt()), allocator); // 不存在则添加 if(value.type() == QVariant::Double) current->AddMember(Value().SetString(key.toString().toStdString().c_str(), allocator), Value().SetDouble(value.toDouble()), allocator); // 不存在则添加 if(value.type() == QVariant::String) current->AddMember(Value().SetString(key.toString().toStdString().c_str(), allocator), Value().SetString(value.toString().toStdString().c_str(),allocator), allocator); // 不存在则添加 } }else if(key.type() == QVariant::Int){ //如果是数组idx } } else { if(key.type() == QVariant::String) { //如果是路径 // 检查是否存在该路径,不存在则创建 if (!current->HasMember(key.toString().toStdString().c_str())) { Value newObject(kObjectType); // 创建一个新的对象 current->AddMember(Value().SetString(key.toString().toStdString().c_str(), allocator), newObject, allocator); } // 将 current 指向下一级 current = &(*current)[key.toString().toStdString().c_str()]; }else if(key.type() == QVariant::Int){ //如果是数组idx } } } }