QTreeWidget和QDomDocument类里面似乎没有直接的转换方法。
也可以考虑继承QTreeWidget写一个新类,不过暂时没有那样做。
关键函数包含三个。
1. on_actionXML_triggered(), 将XML文件读取到QDomDocument对象。QDomDocument是Qt本身提供的类,用来以树结构保存XML文档。
2. parseDomToItem(const QDomElement &element, QTreeWidgetItem *parent), 递归解析QDomDocument对象
3. createItem(const QDomElement &element, QTreeWidgetItem *parent), 在解析过程中根据QDomElement类型创建QTreeWidgetItem
void XMLTREE_MainWindow::parseDomToItem(const QDomElement &element, QTreeWidgetItem *parent) { if(element.isNull()) return; QTreeWidgetItem *item = createItem(element, parent); QDomNodeList children = element.childNodes(); for(int i=0;i setText(0, element.tagName()); item->setText(1, element.text()); return item; } void XMLTREE_MainWindow::on_actionXML_triggered() { QString fileName = QFileDialog::getOpenFileName(this, "打开xml文件", QString(), tr("xml文件 (*.xml);;文本文件(*.txt)")); QFile f(fileName); if(!f.open(QFile::ReadWrite)) { exit(-1); } doc.setContent(&f); QDomElement rootElement = doc.documentElement(); QTreeWidgetItem *rootItem = ui->treeWidget->invisibleRootItem(); parseDomToItem(rootElement, rootItem); }void XMLTREE_MainWindow::parseDomToItem(const QDomElement &element, QTreeWidgetItem *parent) { if(element.isNull()) return; QTreeWidgetItem *item = createItem(element, parent); QDomNodeList children = element.childNodes(); for(int i=0;i setText(0, element.tagName()); item->setText(1, element.text()); return item; }void XMLTREE_MainWindow::on_actionXML_triggered() { QString fileName = QFileDialog::getOpenFileName(this, "打开xml文件", QString(), tr("xml文件 (*.xml);;文本文件(*.txt)")); QFile f(fileName); if(!f.open(QFile::ReadWrite)) { exit(-1); } doc.setContent(&f); QDomElement rootElement = doc.documentElement(); QTreeWidgetItem *rootItem = ui->treeWidget->invisibleRootItem(); parseDomToItem(rootElement, rootItem); }