当前位置: 首页 > news >正文

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个,说明我们加入的是正确的。

相关文章:

  • XML语言数据读写理解15
  • XML语言数据读写理解16
  • QT图形显示和处理1
  • QT图形显示和处理2 坐标系统(重点)
  • QT图形显示和处理3 坐标系统(重点)
  • QT图形显示和处理4
  • QT图形显示和处理5
  • QT图形显示和处理6
  • QT图形显示和处理7
  • QT图形显示和处理8
  • QT传输函数控件设计1 引子
  • QT传输函数控件设计2 体渲染和VTK
  • QT传输函数控件设计3 QVTKWidget和QT图形界面的融合
  • QT传输函数控件设计4 接着进行融合
  • QT传输函数控件设计5 显示体渲染效果
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • android 一些 utils
  • Angular 响应式表单 基础例子
  • DOM的那些事
  • Intervention/image 图片处理扩展包的安装和使用
  • js继承的实现方法
  • Linux gpio口使用方法
  • overflow: hidden IE7无效
  • PAT A1092
  • Web Storage相关
  • 从零开始在ubuntu上搭建node开发环境
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • - 概述 - 《设计模式(极简c++版)》
  • 记一次和乔布斯合作最难忘的经历
  • 使用common-codec进行md5加密
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • - 转 Ext2.0 form使用实例
  • 06-01 点餐小程序前台界面搭建
  • #NOIP 2014# day.2 T2 寻找道路
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (动态规划)5. 最长回文子串 java解决
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (原)本想说脏话,奈何已放下
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)scrum常见工具列表
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .Net 6.0 处理跨域的方式
  • .NET单元测试
  • .NET关于 跳过SSL中遇到的问题
  • .NET简谈设计模式之(单件模式)
  • .NET委托:一个关于C#的睡前故事
  • /bin/rm: 参数列表过长"的解决办法
  • /etc/sudoer文件配置简析
  • @Bean, @Component, @Configuration简析
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @GetMapping和@RequestMapping的区别
  • @JoinTable会自动删除关联表的数据