QT:使用QDomDocument XML实现对配置参数的修改

11 篇文章 1 订阅

本文章主要讲解了如何使用QDomDocument XML实现对XML配置参数的修改以及保存,从而可以使程序每次都加载最新的配置参数。

配置参数XML文件:

<?xml version='1.0' encoding='UTF-8'?>
<parameters>
    <CChannelLabel>
        <ParameterItem>
            <integer_parameters>5</integer_parameters>
        </ParameterItem>
    </CChannelLabel>
    <CGainWidget>
        <ParameterItem>
            <double_parameters>40.1; 40.8; 40.9; 40.0; 10.5; 20.5; 40.0; 40.0</double_parameters>
        </ParameterItem>
    </CGainWidget>
</parameters>

 XML修改程序:

void CDataMgr::UpdateParameterFile(const QString ItemName, pStParameterItems& parameter)
{
    if (QFile::exists(m_strParameterFileName))
    {
        QFile rfile(m_strParameterFileName);
        QByteArray dataBytes;

        if (rfile.open(QIODevice::ReadOnly))
        {
            dataBytes = rfile.readAll();
            rfile.close();
        }
        else
        {
            this->LogInfo(QString("The file:%1 open fail!").arg(m_strParameterFileName));
        }

        QDomDocument doc;

        if (doc.setContent(dataBytes))
        {
            QDomElement root = doc.documentElement();
            QDomNodeList nlist = root.elementsByTagName(ItemName);
            QDomElement sub_element = nlist.at(0).toElement();

            QDomNodeList integer_list = sub_element.elementsByTagName("integer_parameters");
            if(integer_list.count() > 0)
            {
                QString nodeVal = "";
                for(int i = 0; i < parameter->integer_parameters.size(); i++)
                {
                    if(i > 0)
                    {
                        nodeVal += "; ";
                    }

                    nodeVal += QString::number(parameter->integer_parameters[i]);
                }

                QDomElement sub_element = integer_list.at(0).toElement();
                QDomNode oldNode = sub_element.firstChild();

                sub_element.firstChild().setNodeValue(nodeVal);
                QDomNode newNode = sub_element.firstChild();
                sub_element.replaceChild(newNode, oldNode);
            }

            QDomNodeList double_list = sub_element.elementsByTagName("double_parameters");
            if(double_list.count() > 0)
            {
                QString nodeVal = "";
                for(int i = 0; i < parameter->double_parameters.size(); i++)
                {
                    if(i > 0)
                    {
                        nodeVal += "; ";
                    }

                    nodeVal += QString::number(parameter->double_parameters[i], 'f', 1);
                }

                QDomElement sub_element = double_list.at(0).toElement();
                QDomNode oldNode = sub_element.firstChild();

                sub_element.firstChild().setNodeValue(nodeVal);
                QDomNode newNode = sub_element.firstChild();
                sub_element.replaceChild(newNode, oldNode);
            }

            rfile.remove();
            QFile wfile(m_strParameterFileName);

            if (wfile.open(QIODevice::WriteOnly))
            {
                QTextStream out_stream(&wfile);
                doc.save(out_stream,4);
                wfile.close();
            }
            else
            {
                this->LogInfo(QString("The file:%1 open fail!").arg(m_strParameterFileName));
            }
        }
    }
    else
    {
        this->LogInfo(QString("The file:%1 NOT EXIST!").arg(m_strParameterFileName));
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AllenSun-1990

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值