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