zoukankan      html  css  js  c++  java
  • Qt读写三种文件,QSettings读ini配置文件,QJsonDocument读JSON文件,QDomDocument读xml文件

    第一种INI配置文件

    .ini 文件是Initialization File的缩写,即初始化文件

    除了windows现在很多其他操作系统下面的应用软件也有.ini文件,用来配置应用软件以实现不同用户的要求。一般不用直接编辑这些.ini文件,应用程序的图形界面即可操作以实现相同的功能。它可以用来存放软件信息,注册表信息等。

    读INI文件

    INI文件内容如下:

    [conn]
    ip=127.0.0.1
    port=8080
    databaseversion=QSQLITE
    databasename=student
    username=YYC
    password=root

    qreadini.h文件内容如下:

    #ifndef QREADINI_H
    #define QREADINI_H
    #include<QSettings>
    
    
    #define DATACONFIG  QReadIni::getInstance()->getIniConfig()
    
    
    typedef struct IniConfig
    {
        QString ip;                //IP地址
        QString port;              //端口
        QString dataBaseVersion;   //数据库版本
        QString dataBaseName;      //数据库名称
        QString userName;          //用户名
        QString passWord;          //密码
    }IniConfig;
    
    
    class QReadIni
    {
    public:
        static QReadIni*getInstance();
    
    
        void readIni();
    
    
        const IniConfig &getIniConfig();
    
    
    private:
        QReadIni();
    
    
        IniConfig iniConfig;
    
    
        static QReadIni*instance;
    };
    
    
    #endif // QREADINI_H

    qreadini.cpp文件内容如下:

    #include "qreadini.h"
    
    
    QReadIni*QReadIni::instance = NULL;
    
    
    QReadIni *QReadIni::getInstance()
    {
        if(instance == NULL)
        {
            instance = new QReadIni();
        }
        return instance;
    }
    
    
    QReadIni::QReadIni()
    {
        this->readIni();
    }
    
    
    void QReadIni::readIni()
    {
        QSettings * configIniRead = new QSettings("config.ini",QSettings::IniFormat);//初始化读取Ini文件对象
        iniConfig.ip = configIniRead->value("conn/ip").toString();                          //IP地址
        iniConfig.port = configIniRead->value("conn/port").toString();                      //端口
        iniConfig.dataBaseVersion = configIniRead->value("conn/databaseversion").toString();//数据库版本
        iniConfig.dataBaseName = configIniRead->value("conn/databasename").toString();      //数据库名称
        iniConfig.userName = configIniRead->value("conn/username").toString();              //用户名
        iniConfig.passWord = configIniRead->value("conn/password").toString();              //密码
    
    
        delete configIniRead;
    }
    
    
    const IniConfig &QReadIni::getIniConfig()
    {
        return iniConfig;
    }

    写ini文件

    #include <QtCore/QCoreApplication>  
    #include <QSettings>  
    int main(int argc, char *argv[])  
    {  
       QCoreApplication a(argc, argv);  
       //Qt中使用QSettings类读写ini文件  
       //QSettings构造函数的第一个参数是ini文件的路径,第二个参数表示针对ini文件,第三个参数可以缺省  
       QSettings *configIniWrite = new QSettings("hahaya.ini", QSettings::IniFormat);  
       //向ini文件中写入内容,setValue函数的两个参数是键值对  
       //向ini文件的第一个节写入内容,ip节下的第一个参数  
       configIniWrite->setValue("/ip/first", "192.168.0.1");  
       //向ini文件的第一个节写入内容,ip节下的第二个参数  
       configIniWrite->setValue("ip/second", "127.0.0.1");  
       //向ini文件的第二个节写入内容,port节下的第一个参数  
       configIniWrite->setValue("port/open", "2222");  
       //写入完成后删除指针  
       delete configIniWrite;  
         
       return a.exec();  
    }  

    第二种JSON文件

    {
        "conn": {
            "ip": "127.0.0.1",
            "port": "8080",
            "databaseversion": "QSQLITE",
            "databasename": "student",
            "username": "YYC",
            "password": "root"
        }
    }

    qreadjson.h文件内容如下

    #ifndef QREADJSON_H
    #define QREADJSON_H
    
    
    #include <QString>
    #include <QFile>
    #include <QIODevice>
    #include <QDomNodeList>
    #include <QJsonDocument>
    #include <QJsonObject>
    
    
    #define JSONCONFIG  QReadJson::getInstance()->getJsonConfig()
    
    
    typedef struct JsonConfig
    {
        QString ip;                //IP地址
        QString port;              //端口
        QString dataBaseVersion;   //数据库版本
        QString dataBaseName;      //数据库名称
        QString userName;          //用户名
        QString passWord;          //密码
    }JsonConfig;
    
    
    
    
    class QReadJson
    {
    public:
    
    
        static QReadJson * getInstance();
    
    
        bool readJson();
    
    
        const JsonConfig &getJsonConfig();
    
    
    private:
        QReadJson();
    
    
        static QReadJson * instance;
    
    
        JsonConfig jsonConfig;
    };
    
    
    #endif // QREADJSON_H

    qreadjson.cpp内容如下:

    #include"qreadjson.h"
    
    
    QReadJson * QReadJson::instance = NULL;
    
    
    QReadJson *QReadJson::getInstance()
    {
        if(NULL == instance)
        {
            instance = new QReadJson();
        }
    
    
        return instance;
    }
    
    
    QReadJson::QReadJson()
    {
        this->readJson();
    }
    
    
    bool QReadJson::readJson()
    {
        QString strJson;
    
    
        QFile *file=new QFile("config.json");
        if(file->open(QIODevice::ReadOnly | QIODevice::Text))
        {
            strJson = file->readAll();
            file->close();
        }
        else
        {
            return false;
        }
        file->close();
    
    
        QJsonDocument jsonDom = QJsonDocument::fromJson(strJson.toUtf8());
        QJsonObject jsonObject = jsonDom.object();
        QJsonValue jsonValue = jsonObject.value(QString("conn"));
    
    
    
    
        QJsonObject objectItem = jsonValue.toObject();
    
    
        jsonConfig.ip = objectItem["ip"].toString();
        jsonConfig.port = objectItem["port"].toString();
        jsonConfig.dataBaseVersion = objectItem["databaseversion"].toString();
        jsonConfig.dataBaseName = objectItem["databasename"].toString();
        jsonConfig.userName = objectItem["username"].toString();
        jsonConfig.passWord = objectItem["password"].toString();
    
    
        delete file;
        return true;
    }
    
    
    const JsonConfig &QReadJson::getJsonConfig()
    {
        return jsonConfig;
    }

    第三种是读取xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    -<data>-
    
    <database>
    
    <ip>127.0.0.1</ip>
    
    <port>8080</port>
    
    <databaseversion>QSQLITE</databaseversion>
    
    <databasename>student.db</databasename>
    
    <username>root</username>
    
    <password>123</password>
    
    </database>
    
    </data>

    qreadxml.h文件内容如下:

    #ifndef QREADXML_H
    #define QREADXML_H
    #include<QString>
    #include<QtXml>
    #include<QFile>
    #include<QIODevice>
    #include<QDomNodeList>
    
    
    #define XMLCONFIG  QReadXml::getInstance()->getXmlConfig()
    
    
    typedef struct XmlConfig
    {
        QString ip;                //IP地址
        QString port;              //端口
        QString dataBaseVersion;   //数据库版本
        QString dataBaseName;      //数据库名称
        QString userName;          //用户名
        QString passWord;          //密码
    }XmlConfig;
    
    
    class QReadXml
    {
    public:
        static QReadXml * getInstance();
    
    
        bool readXML();
    
    
        const XmlConfig &getXmlConfig();
    
    
    private:
        QReadXml();
    
    
        XmlConfig xmlConfig;
    
    
        static QReadXml * instance;
    };
    
    
    #endif // QREADXML_H

    qreadxml.cpp文件如下

    #include "qreadxml.h"
    
    
    QReadXml *QReadXml::instance = NULL;
    
    
    QReadXml *QReadXml::getInstance()
    {
        if(NULL == instance)
        {
            instance = new QReadXml();
        }
    
    
        return instance;
    }
    
    
    QReadXml::QReadXml()
    {
        this->readXML();
    }
    
    
    bool QReadXml::readXML()
    {
        int countData = 0;
        QDomDocument dom;
        QFile *file=new QFile("config.xml");
        if(file->open(QIODevice::ReadOnly))
        {
            if(!dom.setContent(file))  //将该xml文件导入到dom中
            {
                file->close();
                return false;
            }
        }
        else
        {
            return false;
        }
        file->close();
        QDomElement docElem = dom.documentElement();   //返回根元素
    
    
        QDomNode node = docElem.firstChild();          //返回根节点的第一个子节点
    
    
        while(!node.isNull())                        //如果节点不为空
        {
            if(node.isElement())                     //如果节点是元素
            {
                QDomElement element=node.toElement();//将其转化为元素
    
    
                QDomNodeList list=element.childNodes();//取出该元素的所有子节点放到list中
    
    
                //将子节点元素全部取出来
                for(int i = 0; i < list.count(); i ++)
                {
                    QDomNode domNode = list.at(i);
                    if(domNode.isElement())
                    {
                        //取出我们所要的数据
                        switch(i)
                        {
                        case 0:xmlConfig.ip = domNode.toElement().text();break;
                        case 1:xmlConfig.port = domNode.toElement().text();break;
                        case 2:xmlConfig.dataBaseVersion = domNode.toElement().text();break;
                        case 3:xmlConfig.dataBaseName = domNode.toElement().text();break;
                        case 4:xmlConfig.userName = domNode.toElement().text();break;
                        case 5:xmlConfig.passWord = domNode.toElement().text();break;
                        }
                    }
                }
            }
    
    
            countData++;
            node = node.nextSibling(); //下一个兄弟节点
        }
    
    
        return countData > 0 ? true : false;
    }
    
    
    const XmlConfig &QReadXml::getXmlConfig()
    {
        return xmlConfig;
    }

    原文:

    https://blog.csdn.net/yinyuchen1/article/details/75093895

    https://www.cnblogs.com/mzy-google/p/5162107.html

    https://blog.csdn.net/qq_33485434/article/details/80483883

  • 相关阅读:
    Codeforces 1149 B
    Tenka1 Programmer Contest 2019 D
    BZOJ 1001 [BeiJing2006]狼抓兔子
    Codeforces 741 D
    HDU 5306 Gorgeous Sequence
    HDU 6521 Party
    Codeforces 912A/B
    Educational Codeforces Round 35 B/C/D
    Codeforces 902D/901B
    Codeforces 902B
  • 原文地址:https://www.cnblogs.com/xiangtingshen/p/11145974.html
Copyright © 2011-2022 走看看