用QTreeWidget显示XML结构

    xiaoxiao2023-03-24  5

    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); }

    转载请注明原文地址: https://ju.6miu.com/read-1202093.html
    最新回复(0)