首先我们从最底层的Nodets开始写起,然后逐步往上层实现。
在类里面定义一个函数:
QDomElement writeNodets(QDomDocument &doc);
注意参数是QDomDocument,因为你要靠这个参数来创建节点元素。
下面把函数附上:
QDomElement NodeTS::writeNodets(QDomDocument &doc)
{
QDomElement NormalizedIntensityNode = doc.documentElement();
NormalizedIntensityNode = doc.createElement("NormalizedIntensity");
NormalizedIntensityNode.setAttribute("Value", NormalizedIntensity);
QDomElement OpacityNode = doc.documentElement();
OpacityNode = doc.createElement("Opacity");
OpacityNode.setAttribute("Value",Opacity);
QDomElement EmissionNode = doc.documentElement();
EmissionNode = doc.createElement("Emission");
EmissionNode.setAttribute("G", Emission.green());
EmissionNode.setAttribute("R", Emission.red());
EmissionNode.setAttribute("B", Emission.blue());
QDomElement ccNode = doc.documentElement();
ccNode = doc.createElement("Node");
ccNode.appendChild(NormalizedIntensityNode);
ccNode.appendChild(OpacityNode);
ccNode.appendChild(EmissionNode);
return ccNode;
}
其实跟之前的文件读写没有什么区别。我们创建每个元素,然后给它添加属性和属性值,然后归到一个节点里,最后作为返回值返回。如果读了博客前几章,一定就对这个很熟悉了。其实最近这几节的内容并没有什么新的知识,只是要求读者更加熟悉xml文件的结构以及对这种结构我们设计自己的类,然后并进行读写。设计的难度主要是在于层层递进性。
我们再进入到上一层,即使用tsfunItem来获取nodets的内容。我们定义一个函数:
QDomElement writeTsfunItem(QDomDocument &doc);
QDomElement TsfunItem::writeTsfunItem(QDomDocument &doc)
{
QDomElement DensityScaleElement = doc.documentElement();
DensityScaleElement = doc.createElement("DensityScale");
DensityScaleElement.setAttribute("Value", DensityScale);
QDomElement ShadingTypeElement = doc.documentElement();
ShadingTypeElement = doc.createElement("ShadingType");
ShadingTypeElement.setAttribute("Value", ShadingType);
QDomElement GradientFactorElement = doc.documentElement();
GradientFactorElement = doc.createElement("GradientFactor");
GradientFactorElement.setAttribute("Value", GradientFactor);
QDomElement TsNodesElement = doc.documentElement();
TsNodesElement = doc.createElement("Nodes");
//DebugWidget::getDebugWidget()->addContents(QString::number(TsNodes.count()));
for (int i = 0;i < TsNodes.count();i++) {
TsNodesElement.appendChild(TsNodes[i].writeNodets(doc));
}
QDomElement itemNodes = doc.documentElement();
itemNodes = doc.createElement("TsfunItem");
itemNodes.setAttribute("Name", NameID);
itemNodes.appendChild(TsNodesElement);
itemNodes.appendChild(DensityScaleElement);
itemNodes.appendChild(ShadingTypeElement);
itemNodes.appendChild(GradientFactorElement);
return itemNodes;
}
注意到在Nodes节点获取子节点的过程中我们就使用了上面刚设计好的TsNodes[i].writeNodets(doc);函数,在这里还是有很多与之前重复的内容,但是结构貌似越来越复杂了。在我完成整个读写的讲解以后,以及在实现节点某个的添加和删除程序之前,我会把整体的设计思路再给大家讲解一遍,以保证大家能够更好地理解我们的设计思路。下一节我们完成整个写文件的程序。