私はQtに不慣れで、毎日何か新しいことを学んでいます。
現在、空き時間にNokiaN900用の小さなアプリケーションを開発しています。
すべてが順調です。デバイス上でMaemoアプリケーションをコンパイルして実行できます。
foreach
Qtのキーワードについて学びました。(C ++にないことはわかっているので、それについて言及しているQtドキュメントに偶然出くわすまで考えませんでした。)
そこで、非常に煩わしくて読めないループをforeachに変更することにしましたが、失敗しました。 :
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
}
これが私が試した方法です:
foreach (QDomElement node, doc.lastChild().childNodes().at(1).firstChild().childNodes())
{
// Do something with node
}
何らかの理由で、上記のコードはコンパイルさえしません。コンパイラから不可解なエラーメッセージが表示されます。
誰かがそれを正しくする方法を私に説明してもらえますか?
foreach
ループがサポートしていない場合、サポートQDomNodeList
しているXMLファイルを処理する方法はありますforeach
か?
編集:
明確にするために、// Do something with node
この場合は次のとおりです。
EveCharacter chr;
chr.setName(node.attribute(EVE_NAME));
chr.setId(node.attribute(EVE_CHARACTER_ID).toInt());
acc->addCharacter(chr);
ここで、accはタイプEveAccount
であり、データをに格納しますQList<EveCharacter>
。
大文字の記号は、コンパイル時の定数文字列です。
(私はEVE Online APIのクライアントを作成しています。これは、アカウント文字XMLを受け取り、それを解釈するメソッドからのものです。)
これが私が作成する方法ですdoc
:
QDomDocument doc;
doc.setContent(reply->readAll());
から返送されるreply
ことに注意してください。QNetworkReply*
QNetworkAccessManager
ただし、EVE APIはXMLで動作するため、アプリケーションの多くの場所でこれと非常によく似たXML解析を多数実行します。ほとんどのXMLは数百行の長さであり、このような
非常に不規則なデータパターンを含む可能性があります。