XML语言数据读写理解11

208 阅读2分钟

有了前10节的基础,以及我在自己的博客里发布了那个简单的QT调试窗口类,一共两个,一个是有单例的,一个不是。大家想使用的话只需要加个头文件就可以调用了。

我们现在需要把存好的内容给显示出来,看看是不是正确读取了(虽然我觉得是正确的)。

我们再回到以前的Nodets类里,添加如下公共public代码:

`double returnNormalizedIntensity() {
        return NormalizedIntensity;
}
double returnOpacity() {
        return Opacity;
}
inline QColor& returnEmission() {
        return Emission;
}`

毕竟以前的成员都是私有的,现在我们需要能访问它们的接口。接下来在tsfunItem中加入新的成员函数:

`inline int returnNumOfNodes(void) {
        return numOfNodes;
}
inline double returnDensityScale(void) {
        return DensityScale;
}
inline double returnShadingType(void) {
        return ShadingType;
}
inline double returnGradientFactor(void) {
        return GradientFactor;
}
inline NodeTsList& returnTsNodes(void){
        return TsNodes;
}
inline void setNameID(QString& nameid) {
        NameID = nameid;
}
inline QString& returnNameID(void){
        return NameID;
}`
    

之后在tsfunGroup类里面添加并使用这个函数:

`void TsfunGroup::showXML()
{
        DebugWidget::getDebugWidget()->addContents("");
        DebugWidget::getDebugWidget()->addContents("");

        TsfunItem temptsfitmlist;
        for (int i = 0;i<tsfitmlist.count();i++) {

                temptsfitmlist = tsfitmlist[i];
                DebugWidget::getDebugWidget()->addContents(temptsfitmlist.returnNameID());

                DebugWidget::getDebugWidget()->addContents(QString::number(temptsfitmlist.returnDensityScale()));
                DebugWidget::getDebugWidget()->addContents(QString::number(temptsfitmlist.returnGradientFactor()));
                DebugWidget::getDebugWidget()->addContents(QString::number(temptsfitmlist.returnShadingType()));

                NodeTsList ssTsNodes = temptsfitmlist.returnTsNodes();
                for (int j = 0;j<ssTsNodes.count();j++) {
                        QString qsrg = QString::number(ssTsNodes[j].returnEmission().red()) +" " 
                                + QString::number(ssTsNodes[j].returnEmission().green()) + " " 
                                + QString::number(ssTsNodes[j].returnEmission().blue());
                        DebugWidget::getDebugWidget()->addContents(qsrg);
                        DebugWidget::getDebugWidget()->addContents(QString::number(ssTsNodes[j].returnNormalizedIntensity()));
                        DebugWidget::getDebugWidget()->addContents(QString::number(ssTsNodes[j].returnOpacity()));

                }

        }

}`

注意里面的DebugWidget::getDebugWidget()->addContents();都是用来调试的语句。

这个程序其实很简单,就是从类里面去找子类,子类成员,然后显示出来数值而已。

显示效果如下:

`normalMode
100
3
2
0 0 0
0
0
0 0 0
0.23597
0
0 0 0
0.288538
0.0179028
0 0 0
0.288578
0.563502
0 0 0
0.35417
1
0 0 0
1
1
maxMode
100
3
2
0 0 0
0
0
0 0 0
0.13597
0
0 0 0
0.188538
0.0279028
0 0 0
0.288578
0.363502
0 0 0
0.45417
1
0 0 0
1
1`

    所有数据都显示正常。

现在,我们已经能够把xml文件里面的数据读入到自己设计的结构中了,并且能够正确显示出来。下一节我们要想办法设计一个方法,把我们的结构给输出到xml格式的文件中。要注意我们是把结构里面的数据输出到xml文件,而不是说把读入的QDomdocument的结构给输出到xml文件里。