Add conversion from List/Map QVariants into structured data

This commit is contained in:
baldurk
2019-12-16 10:58:44 +00:00
parent 2f9e620909
commit d18230a09f
+22
View File
@@ -632,6 +632,28 @@ inline SDObject *makeSDObject(const char *name, QVariant val)
ret->data.str = val.toString().toUtf8().data();
ret->type.byteSize = ret->data.str.size();
break;
case QMetaType::QVariantList:
{
QVariantList list = val.toList();
ret->type.name = "array"_lit;
ret->type.basetype = SDBasic::Array;
ret->data.children.reserve(list.size());
for(int i = 0; i < list.size(); i++)
ret->data.children.push_back(makeSDObject("[]", list.at(i)));
ret->type.byteSize = list.size();
break;
}
case QMetaType::QVariantMap:
{
QVariantMap map = val.toMap();
ret->type.name = "struct"_lit;
ret->type.basetype = SDBasic::Struct;
ret->data.children.reserve(map.size());
for(const QString &str : map.keys())
ret->data.children.push_back(makeSDObject(str.toUtf8().data(), map[str]));
ret->type.byteSize = map.size();
break;
}
default: break;
}