2017-04-12 2 views
0

Ich habe einen QPainterPath, der zu meiner QGraphicsScene gezeichnet wird, und ich speichere die Punkte des Pfades, während sie in eine QList gezeichnet werden.QPainterPath in XML schreiben

Meine Frage ist, wie speichere ich jetzt diese Punkte in einem xml (ich nehme an, das würde am besten funktionieren), wie sie gezeichnet werden? Mein Ziel ist, wenn die App schließt, ich lese diese XML, und der Pfad wird sofort in die Szene neu gezeichnet.

Hier ist die Methode, die ich für das Schreiben eingerichtet habe, die ich jedes Mal aufrufen würde, wenn ich einen neuen Punkt auf den Pfad schreibe.

void writePathToFile(QList pathPoints){ 
    QXmlStreamWriter xml; 

    QString filename = "../XML/path.xml"; 
    QFile file(filename); 
    if (!file.open(QFile::WriteOnly | QFile::Text)) 
     qDebug() << "Error saving XML file."; 
    xml.setDevice(&file); 

    xml.setAutoFormatting(true); 
    xml.writeStartDocument(); 

    xml.writeStartElement("path"); 
    // --> no clue what to dump here: xml.writeAttribute("points", ?); 
    xml.writeEndElement(); 

    xml.writeEndDocument(); 
} 

Oder ist dies vielleicht nicht der beste Weg?

Ich denke, ich kann mit dem Lesen und Neuzeichnen des Pfades umgehen, aber dieser erste Teil macht mich fertig.

+0

XML ment ist für Menschen lesbare Daten. Warum werden Sie keine Binärdatei betrachten? – jaskmar

+0

Hmm, ich stimme zu, ich denke, dass XML in diesem Zusammenhang sinnlos ist. Die Frage bleibt jedoch weiterhin, nicht sicher, wie ich die Punkte ausspreche. – bauervision

Antwort

3

Sie können binäre Datei:

QPainterPath path; 
// do sth 
{ 
    QFile file("file.dat"); 
    file.open(QIODevice::WriteOnly); 
    QDataStream out(&file); // we will serialize the data into the file 
    out << path; // serialize a path, fortunately there is apriopriate functionality 
} 

Deserialisierung ist ähnlich:

QPainterPath path; 
{ 
    QFile file("file.dat"); 
    file.open(QIODevice::ReadOnly); 
    QDataStream in(&file); // we will deserialize the data from the file 
    in >> path; 
} 
//do sth