3

QJson ( http://qjson.sourceforge.net ) は、Q_OBJECTS をシリアライズおよびデシリアライズするための非常に便利な API を実装しています。Q_PROPERTIES を qVariant に変換することにより、任意のモデル インスタンスの便利なシリアライズおよびデシリアライズが可能になります。

XMLに似たものはありますか? QDom* および QXml* ファミリーはどちらもかなり限定されています。

4

1 に答える 1

2

私の知る限り、それを行うサードパーティのライブラリはありません。次の 2 つのオプションがあります。

を。各オブジェクトのシリアライゼーション/デシリアライゼーションを手作業でコーディングします。とても簡単です。シリアル化するには、次のようにします。

QDomElement Asset::ToXMLNode(QDomDocument& doc)
{
    QDomElement elem = doc.createElement("Asset");
    elem.setAttribute("Image", ImageName);
    elem.setAttribute("Name", Description);
    elem.setAttribute("ID", ID);
    elem.setAttribute("TargetClass", ClassType);
    elem.setAttribute("Type", TypeToString());
    QDomElement physEl = doc.createElement("Physics");
    for(int i=0;i<BodyShapes.count();i++)
    {
        physEl.appendChild(BodyShapes[i]->ToXMLNode(doc));
    }
    elem.appendChild(physEl);
    return elem;
}

逆シリアル化するには:

void Asset::Load(const QDomElement& node)
{
    ImageName =  node.attribute("Image");
    Bitmap.load(GetResourceFolder() + QDir::separator() + ImageName);
    Description =  node.attribute("Name");
    ID =  node.attribute("ID");
    ClassType =  node.attribute("TargetClass");
    QDomNodeList shapes = node.firstChildElement("Physics").childNodes();
    for(int i=0;i<shapes.count();i++)
    {
        BodyShape* s = BodyShape::Load(shapes.item(i).toElement());
        BodyShapes << s;
    }
    IsLoaded = true;
}

b. QJSON を複製し、JSON 文字列を出力する部分を書き直して、XML 文字列を出力するようにします。1日程度の勤務になります。

于 2012-11-07T11:30:32.223 に答える