#include <QtGui>
#include <QtXml>
#include <iostream> //创建一个树结构
void populateTree(QTreeWidget *treeWidget)
{
QStringList labels;
labels << QObject::tr("Terms") << QObject::tr("Pages"); treeWidget->setHeaderLabels(labels);
treeWidget->header()->setResizeMode(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" << "");
} //生成一个新的开始标签
void writeIndexEntry(QXmlStreamWriter *xmlWriter, QTreeWidgetItem *item)
{
//创建一个开始标签
xmlWriter->writeStartElement("entry");
//给标签添加属性
xmlWriter->writeAttribute("term", item->text());
//获取子树的第二个元素
QString pageString = item->text();
//根据','拆开
if (!pageString.isEmpty()) {
QStringList pages = pageString.split(", ");
//依次写入Text元素
foreach (QString page, pages)
xmlWriter->writeTextElement("page", page);
}
//如果有子项则递归调用
for (int i = ; 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)) {
std::cerr << "Error: Cannot write file "
<< qPrintable(fileName) << ": "
<< qPrintable(file.errorString()) << std::endl;
return false;
} //写xml
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
//写首行<?xml version="1.0" encoding="UTF-8">
xmlWriter.writeStartDocument();
//生成一个开始标签
xmlWriter.writeStartElement("bookindex");
//对于每一个顶级项,调用writeIndexEntry函数
for (int i = ; i < treeWidget->topLevelItemCount(); ++i)
writeIndexEntry(&xmlWriter, treeWidget->topLevelItem(i));
xmlWriter.writeEndDocument(); file.close();
if (file.error()) {
std::cerr << "Error: Cannot write file "
<< qPrintable(fileName) << ": "
<< qPrintable(file.errorString()) << std::endl;
return false;
}
return true;
} int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTreeWidget treeWidget;
populateTree(&treeWidget);
writeXml("out1.xml", &treeWidget);
return app.exec();
}

最新文章

  1. SQL优化技术分析-4:其他
  2. Android进程保活
  3. 夺命雷公狗-----React---21--小案例之心情留言板
  4. 15个前卫的 HTML5 &amp; CSS3 网页设计作品
  5. Java基础之集合框架——使用真的的链表LinkedList&lt;&gt;(TryPolyLine)
  6. [JSP] c:forEach 输出序号 每行自动生成序号
  7. 多线程问题(JVM重排序)
  8. Storm系列(一)集群的安装配置
  9. STL 统计vector容器中指定对象元素出现的次数:count()与count_if()算法
  10. 定时器 QuartZ Cron表达式
  11. redis centos启动
  12. 微信小程序动态数据跑马灯组件编写
  13. mac navicate破解版汉化
  14. The Kernel Boot Process.内核引导过程
  15. ArcGIS案例学习笔记2_2_模型构建器和山顶点提取批处理
  16. Jetty学习四:部署到Jetty
  17. sqlplus 格式化一例
  18. leetcode简单题目两道(2)
  19. HDU 2544 最短路(floyd+bellman-ford+spfa+dijkstra队列优化)
  20. chrome 中for-in 在遍历对象时的顺序问题

热门文章

  1. Tomcatsession共享方案--memcached-session-manager
  2. java RPC系列之一 rmi
  3. html form表单追加input元素后在提交
  4. 【转】【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)
  5. python网络编程part1
  6. xshell 连接 ubuntu 16.04报错
  7. python文件操作IO
  8. Python笔记6----数组
  9. springboot不加载bootstrap.properties文件
  10. 【2018集训队互测】【XSY3372】取石子