2016-08-03 17 views
0

Wie mein Titel ausgedrückt, ich benutze QDomDocument einlesen XML-Datei und verwenden Sie seine Funktion QDomDocument::documentElement(), um Xml's Root-Knoten Element zu erreichen. Wie folgt aus:QDomElement QDomDocument :: documentElement() Rückgabetyp ist keine Referenz, wie kann es XML in QDomDocument ändern?

QDomElement devices = docDetails_.documentElement(); 
QDomElement device = docDetails_.createElement("Device"); 
QDomAttr id = docDetails_.createAttribute("id"); 
id.setValue(QString::number(deviceInfo.id)); 
device.setAttributeNode(id); 
devices.appendChild(device); 

Aber die Rückgabetyp der Funktion ist kein Referenztyp, warum appendChild() kann QDomDocument ‚s Inhalt ändern?

Antwort

1

The doc sagt (Hervorhebung von mir):

Die analysierten XML intern durch einen Baum von Objekten dargestellt wird, die mit den verschiedenen QDom Klassen zugegriffen kann werden. Nur alle QDom-Klassen Referenzobjekte im internen Baum. Die internen Objekte im DOM-Baum werden gelöscht, sobald das letzte QDom-Objekt, das auf sie verweist, und das QDomDocument selbst gelöscht werden.

So, Aufruf QDomNode::appendChild auf einigen QDom Element wird seine Dokument interne Xml-Struktur ändern.

+0

Sorry, ich verstehe immer noch nicht.Ich meine, wenn 'QDomDocument :: documentElement()' zurückgeben, was kein _reference_ ist, so ist ein _duplicate_.Then Betrieb auf _duplicate_ sollte keinen Sinn für den Inhalt von ' QDomDocument'. –

+0

Ja, es ist ein anderes C++ - Objekt, aber es ist intern implementiert, um mit der internen Struktur 'QDomDocument' verknüpft zu werden. – hank

+0

Ich denke auch so. Könnten Sie mir ein kurzes Beispiel über innere Implementation geben, sagten Sie. –