Qt学习笔记(4):利用XML配置文件实现参数取值

问题描述:一个参数有几种或上百种取值可能
举例:当a<1时,b=0;1<a<10时,b=2;10<a<20时,b=3…
即b的取值依据a的范围来决定

之前问题解决方案:通常在只有少数几种可能的情况下会使用if或者switch语句实现,但是当取值可能太多时,这种方法比较混乱,并且不易维护和后期修改。

现在解决方法:以xml文件作为参数配置文件,然后通过读取xml文件的形式实现参数取值。

示例:当0<a<8时,返回b=12;
8<a<10时,返回b=29;
10<a<17时,返回b=57;
17<a<31时,返回b=93;
31<a<50时,返回b=139;

如下是参数的配置文件
在这里插入图片描述

代码实现

float A::cal_esv(float D )
{
	    //打开文件
		QFile file("D/Work/test.xml");
		if (!file.open(QFile::ReadWrite | QIODevice::Text)) return -1;

		QXmlStreamReader xmlreader(&file);    //读文件
		xmlreader.readNext(); //直接读取下一个节点,因为首先读到的标签是XML文件的头部(第一行)
		while (!xmlreader.atEnd())
		{

			xmlreader.readNext();   //读取子节点
			if (xmlreader.isStartElement() && xmlreader.name() == "Param")  //ParamClass是子节点的名字
			{
				//循环读取子节点
				while (!(xmlreader.name() == "Param" && xmlreader.isEndElement()))
					{
						xmlreader.readNextStartElement();
						if (D > xmlreader.attributes().value("MIN").toFloat() && D <= xmlreader.attributes().value("MAX").toFloat())
						{
							return xmlreader.readElementText().toFloat();   //返回节点内容
						}
					}
			}
		 }
		
		file.close();
		return 0;

}

总结:

  • QXmlStreamReader xmlReader(&filename)用来创建一个迭代变量,其中xmlReader就是一个迭代器
  • readNext(): 从xml输入流中读取下一个记号。
  • name():节点的名字,即<名称></名称>
  • isStartElement():判断当前已读取的记号是否为开始元素,开始元素即<>
  • isEndElement():判断当前已读取的记号是否为结束元素,结束元素即</>
  • readElementText():读取当前记号对应的文本值,<>文本值</>
  • atEnd():判断是否为文件结尾
  • attributes():获取含有属性的节点的属性
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值