if(QString::compare(tagname, "g", Qt::CaseInsensitive) == 0) { // group
QDomNodeList list = e.childNodes(); // 遍历群组中所有标签
for(int i=0; i<list.count(); i++)
{
QDomNode n=list.at(i);
if(QString::compare(n.nodeName(), "g", Qt::CaseInsensitive) == 0) { // group
QDomNodeList list1 = n.childNodes(); // 遍历群组中所有标签
for(int i1=0; i1<list1.count(); i1++)
{
QDomNode n1=list1.at(i1);
if(QString::compare(n1.nodeName(), "g", Qt::CaseInsensitive) == 0) { // group
QDomNodeList list2 = n1.childNodes(); // 遍历群组中所有标签
for(int i2=0; i2<list2.count(); i2++)
{
QDomNode n2=list2.at(i2);
qout << n2.nodeName();
parseSVGTag(n2.toElement(), n2.nodeName());
}
} else {
qout << n1.nodeName();
parseSVGTag(n1.toElement(), n1.nodeName());
}
}
} else {
qout << n.nodeName();
parseSVGTag(n.toElement(), n.nodeName());
}
}
} else {
qout << tagname;
parseSVGTag(e, tagname);
}
如何用while循环简化代码?
此段代码的作用是碰到group标签就打开遍历
while循环和for循环是一样的,经过测试,while循环反而比for循环更慢。因此,你的问题应该是优化你的逻辑,而不是用while循环简化你的代码。
if(QString::compare(tagname, "g", Qt::CaseInsensitive) == 0)
{ // group
QDomNodeList list = e.childNodes(); // 遍历群组中所有标签
int i=0;
while (i<list.count())
{
QDomNode n=list.at(i);
if(QString::compare(n.nodeName(), "g", Qt::CaseInsensitive) == 0)
{ // group
QDomNodeList list1 = n.childNodes(); // 遍历群组中所有标签
int j=0;
while (j<list1.count())
{
QDomNode n1=list1.at(i1);
if(QString::compare(n1.nodeName(), "g", Qt::CaseInsensitive) == 0) { // group
QDomNodeList list2 = n1.childNodes(); // 遍历群组中所有标签
for(int i2=0; i2<list2.count(); i2++)
{
QDomNode n2=list2.at(i2);
qout << n2.nodeName();
parseSVGTag(n2.toElement(), n2.nodeName());
}
} else {
qout << n1.nodeName();
parseSVGTag(n1.toElement(), n1.nodeName());
}
j++;
}
} else {
qout << n.nodeName();
parseSVGTag(n.toElement(), n.nodeName());
}
i++;
}
} else {
qout << tagname;
parseSVGTag(e, tagname);
}