smurfomen / QSerializer

This repo for Qt/C++ serialization objects in JSON or XML based on QtCore
https://smurfomen.github.io/QSerializer/
MIT License
70 stars 24 forks source link

Dose it support std:set? #15

Open hhashoww opened 2 years ago

hhashoww commented 2 years ago

Hi guys,

I'd like to use std:set in my QT class, Is it possible to use this library?

thanks!

hhashoww commented 2 years ago

I added the following MACROs to solve my request But I didn't write the test code yet

define QS_STL_SET(set, type, name) \

public: \ typedef set set_##name##t; \ set##name##t name## = set_##name##_t(); QS_JSON_STLSET(type, name##, name) \ \

define QS_STL_SET_OBJECTS(set, type, name) \

public: \ typedef set set_##name##t; \ set##name##t name## = set_##name##_t(); QS_JSON_STL_SETOBJECTS(type, name##, name) \

define QS_JSON_STL_SET(itemType, name) \

Q_PROPERTY(QJsonValue name READ GET(json, name) WRITE SET(json, name)) \ private: \ QJsonValue GET(json, name)() const { \ QJsonArray val; \ for (auto item : name) val.push_back(item); \ return QJsonValue::fromVariant(val); \ } \ void SET(json, name)(const QJsonValue &varname) { \ if (!varname.isArray()) return; \ name.clear(); \ QJsonArray val = varname.toArray(); \ for (auto item : val) { \ itemType tmp; \ tmp = item.toVariant().value(); \ name.insert(tmp); \ } \ }

define QS_JSON_STL_SET_OBJECTS(itemType, name) \

Q_PROPERTY(QJsonValue name READ GET(json, name) WRITE SET(json, name)) \ private: \ QJsonValue GET(json, name)() const { \ QJsonArray val; \ for (auto item : name) val.push_back(item.toJson()); \ return QJsonValue::fromVariant(val); \ } \ void SET(json, name)(const QJsonValue &varname) { \ if (!varname.isArray()) return; \ name.clear(); \ QJsonArray val = varname.toArray(); \ for (auto item : val) { \ itemType tmp; \ tmp.fromJson(item); \ name.insert(tmp); \ } \ }

smurfomen commented 2 years ago

Hey, you can open pull request with solve of your problem, if you have it. Probably, i don't sure that support std::set is most important feature, but if it works it is good.