现在该实现删除函数了。删除的方法是:给定第几个节点的索引(比如索引2),我们把第三个(0 1 2)节点删除。
结合上一章程序:
TsfunGroup tg; tg.readXML("ss"); //tg.showXML(); NodeTS nts(0.01923,0.1023,QColor(123,32,67)); tg.addNodeToItem("maxMode",nts); tg.deleteNodeInItem("maxMode", 3); tg.deleteNodeInItem("maxMode", 5); tg.writeXML();先添加一个节点,然后再删除一个节点,然后输出到文件。
删除节点不需要直接操作NodeTS类了,所以我们就直接在tsfunItem类里面设一个新的函数:
void TsfunItem::deleteNode(int i) { if(i>=0&&i<= TsNodes.count()) TsNodes.removeAt(i); }很简单,就是删除掉列表对象里的响应坐标的元素。
之后再到 tsfunGroup类:
void TsfunGroup::deleteNodeInItem(QString itemName, int index) { for (int i = 0;i < tsfitmlist.count();i++) { if (itemName == tsfitmlist[i].returnNameID()) { tsfitmlist[i].deleteNode(index); } } }和之前插入节点很相似,先找到对应目标,然后把节点删除。
删除后的效果如下:
<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.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> </Nodes>添加一个元素,删除两个元素,最后剩下5个元素。
要注意我们添加节点和删除节点都是针对我们自己建立的数据结构来删除的,而不是针对QDomdocument建立的对象在里面进行删除,这样的好处是可以实现xml类与数据类进行分离,我们只需要对数据进行操作,而不必在意xml相关类的结构。
下一节开始我们将会把所有的功能都利用起来,实现一个应用。