Qt读写三种文件,QSettings读ini配置文件,QJsonDocument读JSON文件,QDomDocument读xml文件

Posted xiangtingshen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于Qt读写三种文件,QSettings读ini配置文件,QJsonDocument读JSON文件,QDomDocument读xml文件的主要内容,如果未能解决你的问题,请参考以下文章

QT QSettings读写配置文件

QT 登录记住密码方法之一:Qt QSettings读写配置文件

QSettings配置读写-win注册表操作-ini文件读写

Qt 配置文件QSettings

QSettings读取INI配置文件带逗号出问题

QSettings读取INI配置文件带逗号出问题