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

第一种INI配置文件

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

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

读INI文件

INI文件内容如下:

[conn]
ip=127.0.0.1
port=
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", "");
//写入完成后删除指针
delete configIniWrite; return a.exec();
}

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

第二种JSON文件

{
    "conn": {
        "ip": "127.0.0.1",
        "port": "",
        "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></port> <databaseversion>QSQLITE</databaseversion> <databasename>student.db</databasename> <username>root</username> <password></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 = ;
    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 = ; i < list.count(); i ++)
            {
                QDomNode domNode = list.at(i);
                if(domNode.isElement())
                {
                    //取出我们所要的数据
                    switch(i)
                    {
                    case :xmlConfig.ip = domNode.toElement().text();break;
                    case :xmlConfig.port = domNode.toElement().text();break;
                    case :xmlConfig.dataBaseVersion = domNode.toElement().text();break;
                    case :xmlConfig.dataBaseName = domNode.toElement().text();break;
                    case :xmlConfig.userName = domNode.toElement().text();break;
                    case :xmlConfig.passWord = domNode.toElement().text();break;
                    }
                }
            }
        }         countData++;
        node = node.nextSibling(); //下一个兄弟节点
    }     return countData > ? 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

上一篇:mark_May


下一篇:Android API Levels 详解