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