我是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