Qt: QXmlStreamWriter Class写XML文件

前端之家收集整理的这篇文章主要介绍了Qt: QXmlStreamWriter Class写XML文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

需求:

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



效果



思路:

1、先构造树形控件treeWidget.

2、使用QXMLStreamWriter,写XML文件


源码:

  1. #include <QApplication>
  2. #include <QXmlStreamWriter>
  3. #include <QFile>
  4. #include <QDebug>
  5. #include <QTreeWidget>
  6. #include <QTreeWidgetItem>
  7. #include <QHeaderView>
  8.  
  9. void populateTree(QTreeWidget *treeWidget)//构造树
  10. {
  11. treeWidget->setHeaderLabels(QStringList()<<"Terms" <<"Pages");
  12. treeWidget->header()->setSectionResizeMode(QHeaderView::Stretch);
  13. treeWidget->setWindowTitle(QObject::tr("XML Stream Writer"));
  14. treeWidget->show();
  15.  
  16. (void) new QTreeWidgetItem(treeWidget,QStringList() << "sidebearings" << "10,34-35,307-308");
  17. QTreeWidgetItem *subTerm = new QTreeWidgetItem(treeWidget,QStringList() << "subtraction");
  18. (void) new QTreeWidgetItem(subTerm,QStringList() << "of pictures" << "115,244");
  19. (void) new QTreeWidgetItem(subTerm,QStringList() << "of vectors" << "9");
  20. }
  21.  
  22. void writeIndexEntry(QXmlStreamWriter *xmlWriter,QTreeWidgetItem *item )
  23. {
  24. xmlWriter->writeStartElement("entry");;
  25. xmlWriter->writeAttribute("term",item->text(0));
  26.  
  27. QString pageString = item->text(1);
  28. if(!pageString.isEmpty())
  29. {
  30. QStringList pages = pageString.split(",");
  31. foreach (QString page,pages) {
  32. xmlWriter->writeTextElement("page",page);
  33. }
  34. }
  35. for(int i=0; i<item->childCount() ; ++i)
  36. writeIndexEntry(xmlWriter,item->child(i));
  37.  
  38. xmlWriter->writeEndElement();
  39. }
  40.  
  41. bool writeXml(const QString &fileName,QTreeWidget *treeWidget)
  42. {
  43. QFile file(fileName);
  44. if(!file.open(QFile::WriteOnly | QFile::Text))
  45. {
  46. qDebug()<< "Error: Cannot write file "
  47. <<fileName
  48. <<": "
  49. <<file.errorString();
  50. return false;
  51. }
  52. QXmlStreamWriter xmlWriter(&file);
  53. xmlWriter.setAutoFormatting(true);
  54. xmlWriter.writeStartDocument();
  55. xmlWriter.writeStartElement("bookindex");
  56. qDebug()<<"1: "<<treeWidget->topLevelItemCount();
  57. for(int i=0 ; i< treeWidget->topLevelItemCount() ; ++i)
  58. writeIndexEntry(&xmlWriter,treeWidget->topLevelItem(i));
  59. xmlWriter.writeEndDocument();
  60.  
  61. file.close();
  62. if(file.error())
  63. {
  64. qDebug()<<"Error: Cannot write file "
  65. << fileName << ": "
  66. << file.errorString();
  67. return false;
  68. }
  69. return true;
  70. }
  71.  
  72. int main(int argc,char *argv[])
  73. {
  74. QApplication a(argc,argv);
  75.  
  76. QTreeWidget treeWidget;
  77. populateTree(&treeWidget);
  78. writeXml("out1.xml",&treeWidget);
  79.  
  80. return a.exec();
  81. }

猜你在找的XML相关文章