XML编辑工具
【标题】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编辑工具的更多相关文章
- 【Telerik控件学习】-建立自己的图形编辑工具(Diagram)
Telerik提供了RadDiagram控件,用于图形元素的旋转,拖拽和缩放.更重要的是,它还拓展了许多绑定的命令(复制,剪切,粘贴,回退等等). 我们可以用来组织自己的图形编辑工具. Step1.定 ...
- 比較全的XML系列工具 能够轻松实现排版、转换和打印!
XML系列 --------------------------------------------------------------------------------1.Xsl Formatte ...
- [下载]Oracle LOB字段编辑工具
OraLobEditor 是Oracle LOB (CLOB, BLOB) 字段编辑工具. 查看.编辑LOB (CLOB, BLOB)字段(plain text, RTF, image, hex, h ...
- 付费?是不可能的!20行Python代码实现一款永久免费PDF编辑工具
PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献.文档…很多都是PDF格式.它以格式稳定的优势,使得我们在打印.分享.传输过程中能 ...
- Sublime Text编辑工具带有 PEP 8 格式检测插件
Sublime Text编辑工具带有 PEP 8 格式检测插件
- Java XML解析工具 dom4j介绍及使用实例
Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...
- Mysql编辑工具中使用(Navicat查询结果显示行号)
Mysql编辑工具中使用(Navicat查询结果显示行号) as rownum,a.roleId ) t where a.roleId='admin';
- eclipse编辑工具小结
eclipse编辑工具小结 这两天从myeclipse转入eclipse,整体感觉不错,速度更快些,也没在出现各种意外的调试错误.不能断点等情况,并且对整个编辑环境的使用有了更深入的认识,再次对主要几 ...
- Luminar 3 for Mac(照片编辑工具)v3.1.0中文特别版
Luminar for Mac是一款多功能照片编辑软件,使用独特的AI工具加快速度,具备AI Sky Enhancer.Accent AI.太阳光线等创新功能.当然也保留了原有的功能,帮助你轻松的修复 ...
随机推荐
- 深入hibernate的三种状态
学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别 ...
- Android注解使用之Dagger2实现项目依赖关系解耦
前言: 最近牵头发起公司app的重构工作,如何通过重构让项目的耦合降低.开发效率提高,一直是我努力的方向,今天来学习一下一个注解框架Dagger2,然后看看如何使用它来降低项目的耦合. Dagger2 ...
- windows下搭建tensorflow的环境
这年头,不会点人工智能和神经网络,都不好意思跟人打招呼了.之前搞了一下sklearn,今天觉得应该要了解一下google这个传说中的人工智能开源神器. 最近终于有时间了,凡事从hello world开 ...
- 02.PHP7.x编译详解
#php7编译安装安装 ``` useradd -M -s /sbin/nologin www yum -y install openssl-devel bzip2-devel curl-devel ...
- [SinGuLaRiTy] 米勒罗宾素数判定法
[SinGuLaRiTy-1003] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 背景 数论学家利用费马小定理研究出了多种素数测试办法,M ...
- Uva 679 Dropping Balls (模拟/二叉树的编号)
题意:有一颗二叉树,深度为D,所有节点从上到下从左到右编号为1,2,3.....在结点一处放一个小球,每个节点是一个开关,初始全是关闭的,小球从顶点落下,小球每次经过开关就会把它的状态置反,现在问第k ...
- 静态链表实现(A-B)+(B-A)【代码】
-----------------------------------------------第一次发代码,写在前面------------------------------------------ ...
- gulp 学习笔记
以这次学习gulp为契机来同时了解和学习node相关的知识和概念,比如 npm,package.json等,为以后学习node打好基础. 目录 npm 查看模块 安装模块 ...
- saltstack部署
环境准备 [root@server elasticsearch]# cat /etc/redhat-release CentOS release 6.6 (Final)[root@server ela ...
- MapReduce过程(包括Shuffle)详解
首先,map的输入数据默认一个一个的键值对,键就是每一行首字母的偏移量,值就是每一行的值了. 然后每一个输入的键值对都会用我们定义的map函数去处理,这里用wordcount来举例的话就是,每一个键值 ...