一、打开文件
void ABC::openXml() //打开XML文件
{
QFile xmlFile("./xml/menu.xml");
if(!xmlFile.open(QIODevice::ReadOnly))
{
qDebug("不能打开文件!");
return ; //不能打开文件
}
QDomDocument doc;
if (!doc.setContent(&xmlFile))
{
qDebug("不能加载文件!");
xmlFile.close();
return;
}
this->readXmlMenu(doc);
}
二、解析菜单类型
void ABC::readXmlMenu(QDomDocument doc) //解析菜单类型
{
QDomElement root = doc.documentElement();
QDomNodeList nodelist = root.childNodes();
for(unsigned i &#61; 0; i < nodelist.length(); &#43;&#43;i)
{
QString title &#61; nodelist.item(i).toElement().attribute("title");
if(! title.isEmpty())
{
treeMenu &#61; new QTreeWidget(treeFrame);
treeMenu->setGeometry(0, i*150, 180, 150);
treeMenu->setColumnCount(1);
QStringList headers;
headers << title;
treeMenu->setHeaderLabels(headers); //设置标题
treeMenu->insertTopLevelItems(0, rootList);
this->readXmlItem(nodelist.item(i), treeMenu);
}
}
}
三、解析子菜单
void ABC::readXmlItem(QDomNode node, QTreeWidget *treeItem) //解析菜单子级
{
QDomNodeList nodelist &#61; node.childNodes();
for(unsigned i &#61; 0; i < nodelist.length(); &#43;&#43;i)
{
QString title &#61; nodelist.item(i).toElement().attribute("title");
if(nodelist.item(i).toElement().attribute("isend") &#61;&#61; "false")
{
rootItem &#61; new QTreeWidgetItem(treeItem, QStringList(QString(title)));
rootList << rootItem;
treeMenu->expandAll(); //全部显示
this->readXmlItem(nodelist.item(i), treeItem);
}
else
{
QTreeWidgetItem *leaf &#61; new QTreeWidgetItem(rootItem, QStringList(QString(title)));
rootItem->addChild(leaf);
}
}
}
四、xml文件
>