前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt配置文件之Xml

Qt配置文件之Xml

作者头像
用户5908113
发布2019-11-21 20:46:32
1.3K0
发布2019-11-21 20:46:32
举报
文章被收录于专栏:Pou光明Pou光明

XML(可扩展标记语言)文件本身不能对自己“做出”任何操作。它们是存储数据的一种简单方式,而存储的数据可以被其它软件轻松读取。很多程序都会使用可扩展标记语言(XML)来存储数据。XML可用来存储数据、携带数据和交换数据,不是为了显示数据而设计的。

配置文件在程序中的应用还是很常见的,如我们需要启动一个Socket 的客户端去连接远程的Server,这时需要设置服务器的Ip和Port。当我们本次设置完成后,下次再使用的时候希望程序“记录”这个Ip和Port,我们直接连接即可,而不是要求用户再输入一次。面对这种需要“记录”的功能,我们可以使用配置文件。

对于数量不多的配置信息,我们可以使用QSettings进行记录,而对于一些复杂而且数量较多的配置信息,我们则可以使用配置文件。如Xml配置文件、Json配置文件等。

程序平台:ubuntu、 Qt 5.5.1

程序配置文件的主体功能:构造一个配置信息的结构体ConfigInfo,用于存储需要记录的信息,在点击Save按钮时写入配置文件,在构造函数中读取配置信息。当我们下次再运行程序时,读取配置文件后,将我们上次保存的信息显示到UI界面上。该Demo是用来记录Ip和Port的。

1. 写Xml文件函数

①生成Xml文件

代码语言:javascript
复制
void Widget::writeXmlConfig(const QString &fileName, ConfigInfo &configInfo)
{
    QDomDocument doc;
    QDomProcessingInstructioninstruction= doc.createProcessingInstruction("xml","version=\"1.0\"encoding=\"UTF-8\"");
    doc.appendChild(instruction);

    QDomElement root = doc.createElement("Config");//创建根节点
    doc.appendChild(root);                  //添加根节点
    //ip
    QDomElement strIP = doc.createElement("Ip");
    root.appendChild(strIP);               //添加元素节点到根节点
    QDomText strIpText = doc.createTextNode(configInfo.ip);
    strIP.appendChild(strIpText);        //添加元素文本到元素节点
    //port
    QDomElement strPort = doc.createElement("Port");
    root.appendChild(strPort);            //添加元素节点到根节点
    QDomText strPortText = doc.createTextNode(QString::number(configInfo.port));
    strPort.appendChild(strPortText);    //添加元素文本到元素节点


    saveXmlConfig(fileName, doc);

}

②写入完成后保存到文件中:

代码语言:javascript
复制
void Widget::saveXmlConfig(const QString &fileName, QDomDocument &doc)
{
    QDir m_dir("./testXmlConfig");
    if(!m_dir.exists())
    {
        system("mkdir ./testXmlConfig");
    }

    QFile file(m_dir.absolutePath() + "/" + fileName);
    if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text))
    {
        return;
    }

    QTextStream out(&file);
    out.setCodec("UTF-8");
    doc.save(out, 4, QDomNode::EncodingFromTextStream);
    file.close();
}

2. 读取Xml文件

①读取Xml文件

代码语言:javascript
复制
void Widget::readXmlConfig(const QString &fileName, ConfigInfo &configInfo)
{
    QFile file(fileName);
    if(file.open(QIODevice::ReadOnly))
    {
        QDomDocument doc("testConfig");

        if(doc.setContent(&file))
        {
            QDomElement root = doc.documentElement();
            listDom(root,configInfo);
        }

        file.close();
    }
}

②遍历存储的节点

代码语言:javascript
复制
void Widget::listDom(QDomElement &docElem,
                     ConfigInfo &configInfo)
{
    QDomNode node = docElem.firstChild();
    if(node.toElement().isNull())
    {
        return;
    }

    while(!node.isNull())
    {
        QDomElement element = node.toElement();

        if(element.tagName() == "Ip")
        {
            configInfo.ip = element.text();
            qDebug() << "test ip" << configInfo.ip;
        }
        if(element.tagName() == "Port")
        {
            configInfo.port = element.text().toInt();
            qDebug() << "test port" << configInfo.port;
        }

        node = node.nextSibling();
    }
}

以后有机会可以和大家介绍下读取Xml文件后将他们显示到Qt的TreeWidget上。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Pou光明 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档