加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Qt: QXmlStreamWriter Class写XML文件

发布时间:2020-12-16 02:13:15 所属栏目:百科 来源:网络整理
导读:需求: 使用QXMLStreamWriter,将如下界面的结构写入XML文件。 效果: 思路: 1、先构造树形控件treeWidget. 2、使用QXMLStreamWriter,写XML文件。 源码: #include QApplication#include QXmlStreamWriter#include QFile#include QDebug#include QTreeWidg

需求:

使用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();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读