XML编辑工具

时间:2023-03-09 05:27:00
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;
 }