【标题】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. 使用register_shutdown_function触发写日志,使用fastcgi_finish_request提高响应速度

    公司内部的市场管理系统,一直是我一个人维护,最近老是有开发埋怨,内网的账号被人改了密码,账号被解绑了...哈的,错在这还不是一个完整的系统,既没有严格的权限也没有做操作日志呀... 权限现在是准备做在 ...

  2. Nagios监控远程主机

    p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; line-height: 150%; fon ...

  3. 老李推荐: 第14章2节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer架构概述

    老李推荐: 第14章2节<MonkeyRunner源码剖析> HierarchyViewer实现原理-HierarchyViewer架构概述   HierarchyViewer库的引入让M ...

  4. 老李推荐:第4章3节《MonkeyRunner源码剖析》ADB协议及服务: ADB协议概览

    老李推荐:第4章3节<MonkeyRunner源码剖析>ADB协议及服务: ADB协议概览   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试, ...

  5. 老李秘技:loadrunner11是否还支持dblib协议?

    老李秘技:loadrunner11是否还支持dblib协议?   Loadrunner11不再支持Sybase CTLIB 和 DBLIB协议 在loadrunner安装文件中找到*. LRP文件,位 ...

  6. vuejs学习笔记(2)--属性,事件绑定,ajax

    属性 v-for 类似于angular中的 ng-repeat ,用于重复生成html片段: <ul id="box"> <li v-for="(v, ...

  7. PHP初学者如何搭建环境,并在本地服务器(or云端服务器)运行自己的第一个PHP样例

    页面底部有PHP代码样例供测试使用. 1.PHP开发,你需要什么? 1)开发代码的工具,可以用IDE名字叫做phpDesigner.当然也可以临时用记事本代替,记得文件扩展名为.php 2)服务器(本 ...

  8. Asp .Net MVC4笔记之走进MVC

    一.MVC三层架构: mvc三层架构,大家都比较熟悉了,这里再介绍一下.Mvc将应用程序分离为三个部分: Model:是一组类,用来描述被处理的数据,同时也定义这些数据如何被变更和操作的业务规则.与数 ...

  9. 大麦盒子(domybox)无法进入系统解决方案!【简单几步】

    大麦无法进入系统解决方案![简单几步]前提准备:电脑一台盒子控制台软件盒子开机并联网并且盒子和电脑处于同一个路由器下的网络! 前提准备:电脑一台盒子控制台软件盒子开机并联网并且盒子和电脑处于同一个路由 ...

  10. 泛型(CSDN转载)

    函数的参数不同叫多态,函数的参数类型可以不确定吗? 函数的返回值只能是一个吗?函数的返回值可以不确定吗? 泛型是一种特殊的类型,它把指定类型的工作推迟到客户端代码声明并实例化类或方法的时候进行. 下面 ...