首页 技术 正文
技术 2022年11月8日
0 收藏 872 点赞 1,294 浏览 1509 个字

【标题】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; }
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,494
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,295