aeagean / QMap2Object

QMap容器与对象互转的实现

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

QMap2Object

QMap容器与对象互转的实现

template <typename T> T &point2Ref(T &t) { return  t; }
template <typename T> T &point2Ref(T *t) { assert(t != nullptr); return *t; }

#define MAP_TO_OBJECT_ITEM(map, obj, key) \
    point2Ref(obj).key = \
    point2Ref(map).value(#key, std::remove_pointer<decltype(obj)>::type().key) \
                  .value<decltype(point2Ref(obj).key)>();

#define OBJECT_TO_MAP_ITEM(obj, map, key) \
    point2Ref(map)[#key] = point2Ref(obj).key;

static SkinConfig fromMap(const QVariantMap &map)
{
    SkinConfig config;
    MAP_TO_OBJECT_ITEM(map, config, width);
    MAP_TO_OBJECT_ITEM(map, config, height);
    MAP_TO_OBJECT_ITEM(map, config, opacity);
    MAP_TO_OBJECT_ITEM(map, config, visible);
    MAP_TO_OBJECT_ITEM(map, config, color);

    return config;
}

QVariantMap toMap() const
{
    QVariantMap map;
    OBJECT_TO_MAP_ITEM(this, map, width);
    OBJECT_TO_MAP_ITEM(this, map, height);
    OBJECT_TO_MAP_ITEM(this, map, opacity);
    OBJECT_TO_MAP_ITEM(this, map, visible);
    OBJECT_TO_MAP_ITEM(this, map, color);

    return map;
}

About

QMap容器与对象互转的实现


Languages

Language:C++ 97.1%Language:QMake 2.9%