2014-11-26 12 views
0

double, QString, Foo 개체 등을 포함 할 수있는 QVariant가 있습니다.Qt Json serialization

무엇이 포함되어 있는지 모른 채 QVariant을 직렬화하고 싶습니다.

QJsonObject jsonObject; 
jsonObject["myObject"] = _variant.toJsonObject(); 

가 어떤 기능을 내가 Foo에 과부하해야합니다 이 같은 직렬화를 수행하려고? Q_PROPERTY을 사용해야합니까?

답변

2

나는 당신이 당신이 직접 원하는 것을 할 수 있다고 생각하지 않습니다. Foo과 같은 임의의 개체를 QJsonObject으로 변환하는 방법은 없습니다. 단, Foo 개체의 해당 필드를 수동으로 읽고 쓰는 것을 제외하면됩니다. QVariant은 개체가 해당 기능을 지원한다는 것을 알 수 없기 때문에 QVariant을 직접 사용할 수 없습니다. 그것은 당신이 직렬화를 수행하기위한 Qt는에서 제공하는 예제를 따라하는 데 도움이 될 수 있습니다 :

http://doc.qt.io/qt-5/qtcore-json-savegame-example.html

공지 그들은 Game 개체에 대한 매뉴얼 readwrite 방법이있다.

+0

, 그것은이다 : http://doc.qt.io/qt-5/qtcore- json-savegame-example.html –

+1

@PatrizioBekerle : 업데이트되었습니다. – b4hand

2

this에 따르면 당신은 이제 당신의 질문이 될

QJSonObject

어떤 QVariant를 변환 할 수 있어야한다 : 방법 푸 클래스 QVariant하는 변환하는 방법?

toQVariant 및 fromQVariant 메서드를 Foo 클래스에 추가하여이 동작을 캡슐화하는 것이 좋습니다. 가장 편리한 QVariant 클래스는 이제 실제로 당신이 당신의 푸 개체를 직렬화하기 위해 다음과 같이 사용할 수 있습니다 QVariantMap

링크가 깨진
QVariant toVariant(Foo song) { 
    QVariantMap map; 
    map.insert("album", wstring2Utf8(song.album())); 
    map.insert("artist", wstring2Utf8(song.artist())); 
    map.insert("duration", song.duration()); 
    map.insert("fingerprint", wstring2Utf8(song.fingerprint())); 
    map.insert("genre", wstring2Utf8(song.genre())); 
    map.insert("title", wstring2Utf8(song.title())); 
    map.insert("year", song.year()); 
    return map; 
}