XML语言数据读写理解14

mac2024-01-25  36

现在我们写一个自由添加节点的程序。内容还是承接上面几章节。

首先我们先从最底层的NodeTS类入手,建造一个构造函数:

NodeTS::NodeTS(double argNormalizedIntensity, double argOpacity, QColor argEmission, QObject * parent):CommonXML(parent){ this->NormalizedIntensity = argNormalizedIntensity; this->Opacity = argOpacity; this->Emission = argEmission; }

我们最后的计划是实现这样的函数:

TsfunGroup tg; tg.readXML(""); NodeTS nts(0.01923,0.1023,QColor(123,32,67)); tg.addNodeToItem("maxMode",nts); tg.writeXML();

首先读取文件,然后再新建一个NodeTS对象,之后把节点加到id为maxMode的 tsfunItem 里面。之后我们再把设置好的节点写入到xml文件里面。

为了实现这样的函数,主要是要先能够在TsfunItem类里面的NodeTsList TsNodes;成员里加入新建的节点。程序如下:

void TsfunItem::addNode(NodeTS nts) { double temp1,temp2; for (int i = 0;i < TsNodes.count()-1;i++) { temp1 = TsNodes[i].returnNormalizedIntensity(); temp2 = TsNodes[i+1].returnNormalizedIntensity(); if(nts.returnNormalizedIntensity()>temp1){ if (nts.returnNormalizedIntensity() < temp2) { //可以插在这里了。 TsNodes.insert(i,nts); break; } } } }

注意这里面的顺序,我们需要根据 NormalizedIntensity 的值来定位节点应该在第几个插入,然后直接插入就行了。

之后在TsfunGroup类里面,定义函数:

void TsfunGroup::addNodeToItem(QString itemName, NodeTS nts) { for (int i = 0;i < tsfitmlist.count();i++) { if (itemName == tsfitmlist[i].returnNameID()) { tsfitmlist[i].addNode(nts); } } }

根据itemName来找到我们要插入的节点,把节点插入。

最后生成的显示效果如下:

<Nodes> <Node> <NormalizedIntensity Value="0.01923"/> <Opacity Value="0.1023"/> <Emission R="123" B="67" G="32"/> </Node> <Node> <NormalizedIntensity Value="0"/> <Opacity Value="0"/> <Emission R="0" B="0" G="0"/> </Node> <Node> <NormalizedIntensity Value="0.13597"/> <Opacity Value="0"/> <Emission R="0" B="0" G="0"/> </Node> <Node> <NormalizedIntensity Value="0.188538"/> <Opacity Value="0.0279028"/> <Emission R="0" B="0" G="0"/> </Node> <Node> <NormalizedIntensity Value="0.288578"/> <Opacity Value="0.363502"/> <Emission R="0" B="0" G="0"/> </Node> <Node> <NormalizedIntensity Value="0.45417"/> <Opacity Value="1"/> <Emission R="0" B="0" G="0"/> </Node> <Node> <NormalizedIntensity Value="1"/> <Opacity Value="1"/> <Emission R="0" B="0" G="0"/> </Node> </Nodes>

可以看到子节点从以前的6个变成了7个,说明我们加入的是正确的。

最新回复(0)