【标题】XML编辑工具

【开发环境】Qt 5.2.0

【概要设计】使用QT的视图/模型结构、treeview控件以树形结构显示所要操作的XML文件,并实现xml的相关操作

【详细设计】

主要包含 node.h(节点类)、model.h(模型类)、xml.h(xml操作类)

node.h文件使用两个Qstring字符串变量作为类成员,分别用于表示XML文件的节点名和节点值,一个Node节点表示父节点和一个Qlist列表用于存储孩子节点

 #ifndef NODE_H
 #define NODE_H

 #include <QList>
 #include <QString>

 class Node
 {
 public:
     Node(QString nodeName,  QString nodeText, Node *parent);
     Node(QString nodeName,  QString nodeText);
     Node();
     ~Node();
     QString nodeName;
     QString nodeText;
     Node *parent;
     QList<Node *> children;

 };
 #endif // NODE_H

model类继承自QAbstractItemModel类,按照Qt模型的要求实现相应的函数

data函数:如果是第一列则显示节点名,如果是第二列,则显示节点的值

 QModelIndex Model::index(int row, int column,
                                 const QModelIndex &parent) const
 {
      || column < )
         return QModelIndex();
     Node *parentNode = nodeFromIndex(parent);
     Node *childNode = parentNode->children.value(row);
     if (!childNode)
         return QModelIndex();
     return createIndex(row, column, childNode);
 }

 QVariant Model::data(const QModelIndex &index, int role) const
 {
     if (role != Qt::DisplayRole)
         return QVariant();

     Node *node = nodeFromIndex(index);

     )
         return node->nodeName;
     )
         return node->nodeText;
 }

xml::read函数将读取到的XML元素名和元素值依次赋值给node节点的nodename和nodetext

 Node* Xml::read(QDomDocument doc)
 {
     QDomElement docElem = doc.documentElement();
     QDomNode n = docElem.firstChild();
     QString rootText = "";
     Node *rootNode = new Node(n.parentNode().toElement().tagName(), rootText);
     while(n.isElement())
     {
         QString nodeName = n.toElement().tagName();
         QString nodeText = n.toElement().text();
         if(n.hasChildNodes())
             nodeText = "";
         Node *node = new Node(nodeName, nodeText, rootNode);
         rootNode->children += node;
         if(n.hasChildNodes())
             trealChild(n, node);
         n = n.nextSibling();
     }
     return rootNode;
 }

XML编辑工具的更多相关文章

  1. 【Telerik控件学习】-建立自己的图形编辑工具(Diagram)

    Telerik提供了RadDiagram控件,用于图形元素的旋转,拖拽和缩放.更重要的是,它还拓展了许多绑定的命令(复制,剪切,粘贴,回退等等). 我们可以用来组织自己的图形编辑工具. Step1.定 ...

  2. 比較全的XML系列工具 能够轻松实现排版、转换和打印!

    XML系列 --------------------------------------------------------------------------------1.Xsl Formatte ...

  3. [下载]Oracle LOB字段编辑工具

    OraLobEditor 是Oracle LOB (CLOB, BLOB) 字段编辑工具. 查看.编辑LOB (CLOB, BLOB)字段(plain text, RTF, image, hex, h ...

  4. 付费?是不可能的!20行Python代码实现一款永久免费PDF编辑工具

    PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献.文档…很多都是PDF格式.它以格式稳定的优势,使得我们在打印.分享.传输过程中能 ...

  5. Sublime Text编辑工具带有 PEP 8 格式检测插件

    Sublime Text编辑工具带有 PEP 8 格式检测插件

  6. Java XML解析工具 dom4j介绍及使用实例

    Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...

  7. Mysql编辑工具中使用(Navicat查询结果显示行号)

    Mysql编辑工具中使用(Navicat查询结果显示行号) as rownum,a.roleId ) t where a.roleId='admin';

  8. eclipse编辑工具小结

    eclipse编辑工具小结 这两天从myeclipse转入eclipse,整体感觉不错,速度更快些,也没在出现各种意外的调试错误.不能断点等情况,并且对整个编辑环境的使用有了更深入的认识,再次对主要几 ...

  9. Luminar 3 for Mac(照片编辑工具)v3.1.0中文特别版

    Luminar for Mac是一款多功能照片编辑软件,使用独特的AI工具加快速度,具备AI Sky Enhancer.Accent AI.太阳光线等创新功能.当然也保留了原有的功能,帮助你轻松的修复 ...

随机推荐

  1. 【C++】指针与引用的区别

    本文主要总结在C++中指针与引用的区别. 从定义与性质来看指针与引用有如下区别: 指针表示的是一块变量的地址 引用表示一个变量的别名. 因此指针变量需要占用空间(一个指针变量在32位系统下占用4字节, ...

  2. swfobject.js加载swf,关于是否加加载完成;

    这几个帖子可以参考下 http://bbs.9ria.com/forum.php?mod=viewthread&page=1&tid=38913 http://bbs.9ria.com ...

  3. 老李分享:持续集成学好jenkins之内置命令

    老李分享:持续集成学好jenkins之内置命令   Jenkins命令调用方式:调用Jenkins命令设置job的描述信息. $JAVA_BIN-jar "$JENKINS_CLI_JAR& ...

  4. 解析新浪微博表情包的一套js代码

    本文出自本人原创,转载请注明出处 /** * Created by Lemon on 2017/4/6. *//** * return 解析后的值 * analysis 参数 * obj.value: ...

  5. Canvas绘制一个大鱼喂小鱼的游戏

    Canvas是HTML5中的一部分,强大的API足以让我们绘制我们任意想绘制的东西.利用Canvas的基础学习以及JavaScript面向对象的思想绘制一个小游戏,下面是源码地址https://git ...

  6. JavaScript变量相关问题

    本文重在探讨JavaScript变量包含的两种不同数据类型的值--基本类型值和引用类型值的区别.在此外稍微带过ECMAScript和JavaScript的关系. 题为JavaScript变量,但更具体 ...

  7. android studio 2.3 下载地址

      android studio下载:  Windows+SDK:(1.8GB)| Windows(428 MB) | Linux    idea  win.exe  win.zip 序号 名称 中文 ...

  8. R语言各种假设检验实例整理(常用)

    一.正态分布参数检验 例1. 某种原件的寿命X(以小时计)服从正态分布N(μ, σ)其中μ, σ2均未知.现测得16只元件的寿命如下: 159 280 101 212 224 379 179 264  ...

  9. 解决Tomcat: Can't load IA 32-bit .dll on a AMD 64-bit platform 问题

    错误如下: java.lang.UnsatisfiedLinkError: E:\Program Files\MyEclipse 10\apache-tomcat-7.0.23\bin\tcnativ ...

  10. Neural Networks and Deep Learning(神经网络与深度学习) - 学习笔记

    catalogue . 引言 . 感知器及激活函数 . 代价函数(loss function) . 用梯度下降法来学习-Learning with gradient descent . 用反向传播调整 ...