Ich bin neu in Qt und lerne jeden Tag etwas Neues.
Derzeit entwickle ich eine kleine Anwendung für mein Nokia N900 in meiner Freizeit.
Alles ist in Ordnung, ich kann Maemo-Anwendungen auf dem Gerät kompilieren und ausführen.Wie verwende ich foreach mit QDomNodeList in Qt?
habe ich nur über die foreach
Schlüsselwort in Qt gelernt. (Ich weiß, dass es nicht in C++ ist, also habe ich nicht darüber nachgedacht, bis ich versehentlich auf ein Qt-Dokument stieß, das das erwähnte.)
Also beschloss ich, meine ziemlich nervigen und unlesbaren Loops zu foreach zu ändern, aber ich scheiterte mit diesem:
QDomNodeList list = doc.lastChild().childNodes().at(1).firstChild().childNodes();
for (int x = 0; x < list.count(); x++)
{
QDomElement node = list.at(x).toElement();
// Do something with node
}
Dies ist, wie ich versucht:
foreach (QDomElement node, doc.lastChild().childNodes().at(1).firstChild().childNodes())
{
// Do something with node
}
Aus irgendeinem Grund der obige Code nicht einmal kompilieren lässt. Ich bekomme kryptische Fehlermeldungen vom Compiler.
Könnte jemand mir bitte erklären, wie man es richtig machen?
Wenn die foreach
Schleife QDomNodeList
nicht unterstützt, gibt es eine Möglichkeit, XML-Dateien zu behandeln, die foreach
unterstützt?
EDIT:
Um zu klären, // Do something with node
ist folgend in diesem Fall:
EveCharacter chr;
chr.setName(node.attribute(EVE_NAME));
chr.setId(node.attribute(EVE_CHARACTER_ID).toInt());
acc->addCharacter(chr);
Wo acc vom Typ EveAccount
, die Daten in einem QList<EveCharacter>
speichert.
Die Groß Symbole sind Kompilierung-Konstante Strings.
(Ich bin ein Client für das EVE Online API erstellen Dieses von der Methode ist, dass the account characters XML und interpretiert sie empfängt..)
Dies ist, wie ich schaffen doc
:
QDomDocument doc;
doc.setContent(reply->readAll());
Beachten Sie, dass reply
ist a QNetworkReply*
, die von einem QNetworkAccessManager
zurückgeschickt wird.
Da jedoch die EVE API mit XML arbeitet, kann ich eine Menge XML in vielen Orten in meiner Anwendung dieser sehr ähnlich Parsen.
Die meisten der XMLs können mehrere hundert Zeilen lang sein und ganz unregelmäßiges Datenmuster enthalten, such as this one.
Nebenbei ist der Grund, warum Sie eine kryptische Nachricht erhalten, weil 'foreach' kein Keyword ist, es ist ein Makro. Da C++ die Syntax nicht unterstützt, muss Qt einige clevere Pre-Prozessor-Sachen machen, damit es funktioniert. Das bedeutet, dass Compilermeldungen für Code verwendet werden, der nicht so aussieht wie der Code, den Sie sehen. – Skilldrick
@Skilldrick - Danke für die Erklärung! – Venemo