XML语言数据读写理解14
现在我们写一个自由添加节点的程序。内容还是承接上面几章节。
首先我们先从最底层的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个,说明我们加入的是正确的。