QSerializer icon indicating copy to clipboard operation
QSerializer copied to clipboard

Dose it support std:set?

Open hhashoww opened this issue 3 years ago • 2 comments

Hi guys,

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

thanks!

hhashoww avatar Jan 13 '22 08:01 hhashoww

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_STL_SET(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_SET_OBJECTS(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<itemType>();
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);
}
}

hhashoww avatar Jan 18 '22 08:01 hhashoww

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.

smurfomen avatar Jan 20 '22 09:01 smurfomen