QJsonObject BaseConfig::toJsonObject() const
{
    QVariantMap map;
    const auto metaObject = this->metaObject();
    LOG() << metaObject->propertyOffset() << metaObject->propertyCount();
    for(int i = metaObject->propertyOffset();
        i < metaObject->propertyCount();i++)
    {
        auto pname = metaObject->property(i).name();
        LOG() << pname << ":" << this->property(pname) << metaObject->property(i).isEnumType();
        if(metaObject->property(i).isEnumType() == true) //枚举变量
        {
            auto tpname = metaObject->property(i).typeName();
            int index = BaseConfig::staticMetaObject.indexOfEnumerator(tpname);
            auto v = BaseConfig::staticMetaObject.enumerator(index).valueToKey(this->property(pname).toInt());
            map.insert(pname,v);
        }else
            map.insert(pname,this->property(pname));
    }
 
    return QJsonObject::fromVariantMap(map);
}
 
void BaseConfig::loadFromJsonObject(const QJsonObject &jobj)
{
    QVariantMap map = jobj.toVariantMap();
    for(auto p:map.keys())
    {
        QVariant v = map.value(p);
        LOG() << this->setProperty(p.toLatin1(),v) << p << v;
 
    }
}