我是Qt新手,每天都在學習新東西。
目前,我在空閒時間爲我的諾基亞N900開發小型應用程序。
一切都很好,我可以在設備上編譯和運行Maemo應用程序。如何在Qt中使用QDomNodeList的foreach?
我剛剛瞭解到Qt中的foreach
關鍵字。 (我知道它不在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>
存儲數據的。
大寫符號是編譯時常量字符串。
(我創建了在線前夕API客戶端這是從接收the account characters XML並對其進行解釋的方法。)
這是我如何創建doc
:
QDomDocument doc;
doc.setContent(reply->readAll());
注意reply
是一個QNetworkReply*
這是從QNetworkAccessManager
送回。
但是,由於EVE API與XML協同工作,我在我的應用程序的許多地方做了很多與此類似的XML解析。
大部分XML可能有幾百行,可能包含相當不規則的數據模式,such as this one。
另外,你得到一個神祕的信息的原因是因爲'foreach'實際上並不是關鍵字,而是一個宏。由於C++不支持該語法,因此Qt必須做一些聰明的預處理器才能使其工作。這意味着任何編譯器消息都將用於看起來不像代碼那樣的代碼。 – Skilldrick 2010-05-26 16:28:01
@Skilldrick - 感謝您的解釋! – Venemo 2010-05-26 16:31:23