微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Qt: QXmlStreamWriter Class写XML文件

需求:

使用QXMLStreamWriter,将如下界面的结构写入XML文件



效果



思路:

1、先构造树形控件treeWidget.

2、使用QXMLStreamWriter,写XML文件


源码:

#include <QApplication>
#include <QXmlStreamWriter>
#include <QFile>
#include <QDebug>
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QHeaderView>

void populateTree(QTreeWidget *treeWidget)//构造树
{
    treeWidget->setHeaderLabels(QStringList()<<"Terms" <<"Pages");
    treeWidget->header()->setSectionResizeMode(QHeaderView::Stretch);
    treeWidget->setwindowTitle(QObject::tr("XML Stream Writer"));
    treeWidget->show();

    (void) new QTreeWidgetItem(treeWidget,QStringList() << "sidebearings" << "10,34-35,307-308");
    QTreeWidgetItem *subTerm = new QTreeWidgetItem(treeWidget,QStringList() << "subtraction");
    (void) new QTreeWidgetItem(subTerm,QStringList() << "of pictures" << "115,244");
    (void) new QTreeWidgetItem(subTerm,QStringList() << "of vectors" << "9");
}

void writeIndexEntry(QXmlStreamWriter *xmlWriter,QTreeWidgetItem *item )
{
    xmlWriter->writeStartElement("entry");;
    xmlWriter->writeAttribute("term",item->text(0));

    QString pageString = item->text(1);
    if(!pageString.isEmpty())
    {
        QStringList pages = pageString.split(",");
        foreach (QString page,pages) {
            xmlWriter->writeTextElement("page",page);
        }
    }
    for(int i=0; i<item->childCount() ; ++i)
        writeIndexEntry(xmlWriter,item->child(i));

    xmlWriter->writeEndElement();
}

bool writeXml(const QString &fileName,QTreeWidget *treeWidget)
{
    QFile file(fileName);
    if(!file.open(QFile::writeonly | QFile::Text))
    {
        qDebug()<< "Error: Cannot write file "
                <<fileName
               <<": "
              <<file.errorString();
        return false;
    }
    QXmlStreamWriter xmlWriter(&file);
    xmlWriter.setAutoFormatting(true);
    xmlWriter.writeStartDocument();
    xmlWriter.writeStartElement("bookindex");
    qDebug()<<"1: "<<treeWidget->topLevelItemCount();
    for(int i=0 ; i< treeWidget->topLevelItemCount() ; ++i)
        writeIndexEntry(&xmlWriter,treeWidget->topLevelItem(i));
    xmlWriter.writeEndDocument();

    file.close();
    if(file.error())
    {
        qDebug()<<"Error: Cannot write file "
               << fileName << ": "
               << file.errorString();
        return false;
    }
    return true;
}

int main(int argc,char *argv[])
{
    QApplication a(argc,argv);

    QTreeWidget treeWidget;
    populateTree(&treeWidget);
    writeXml("out1.xml",&treeWidget);

    return a.exec();
}

原文地址:https://www.jb51.cc/xml/294675.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。