第一种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();
}

第二种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

Qt读写三种文件,QSettings读ini配置文件,QJsonDocument读JSON文件,QDomDocument读xml文件的更多相关文章

  1. QT的三种协议说明

    关于Qt的三种协议以及是否收费,有以下引文: 引文一: 最近一直在学习 Qt.Qt 有两个许可证:LGPL 和商业协议.这两个协议在现在的 Qt 版本中的代码是完全一致的(潜在含义是,Qt 的早期版本 ...

  2. Qt学习 之 多线程程序设计(QT通过三种形式提供了对线程的支持)

    QT通过三种形式提供了对线程的支持.它们分别是, 一.平台无关的线程类 二.线程安全的事件投递 三.跨线程的信号-槽连接. 这使得开发轻巧的多线程Qt程序更为容易,并能充分利用多处理器机器的优势.多线 ...

  3. getParameter() getInputStream()和getReader() 区别 这三种方法是有冲突的,因为流只能被读一次。

    我们经常用servlet和jsp, 经常用request.getParameter() 来得到数据. request.getParameter()request.getInputStream()req ...

  4. 【Qt 】QSettings写ini配置文件

    QSettings写ini配置文件(Qt版本5.2): #include "inidemo.h" #include <QSettings> #include <Q ...

  5. json串转化成xml文件、xml文件转换成json串

    1.json串转化成xml文件 p=[{"name":"tom","age":30,"sex":"男" ...

  6. Qt之QDomDocument操作xml文件-模拟ini文件存储

    一.背景 不得不说Qt是一个很强大的类库,不管是做项目还是做产品,Qt自身封装的东西就已经非常全面了,我们今天的这篇文章就是模拟了Qt读写ini文件的一个操作,当然是由于一些外力原因,我们决定自己来完 ...

  7. JdbcTemplae使用入门&&Spring三种连接池配置&&Spring配置文件引用外部properties文件

    JdbcTemplate的使用 Spring为了各种支持的持久化技术,都提供了简单操作的模版和回调. JdbcTemplate 简化 JDBC 操作HibernateTemplate 简化 Hiber ...

  8. Qt中三种解析xml的方式

    在下面的随笔中,我会根据xml的结构,给出Qt中解析这个xml的三种方式的代码.虽然,这个代码时通过调用Qt的函数实现的,但是,很多开源的C++解析xml的库,甚至很多其他语言解析xml的库,都和下面 ...

  9. QT的三种开发方式

    最近在学习QT GUI,单纯使用C++硬编码的方式,直接是采用QWidget部件来做,而不是采用QT Designer做UI界面,也不是采用QML+Javascript.单纯使用C++硬编码的方式,缺 ...

随机推荐

  1. Ubuntu下载搜狗输入法

    实在...因为百度上写的就很好了,所以这里就直接“链”了.. https://jingyan.baidu.com/article/2d5afd6933a67b85a2e28e9f.html

  2. Unity项目 - MissionDemolition 愤怒的小鸟核心机制

    目录 游戏原型 项目演示 绘图资源 代码实现 注意事项 技术探讨 参考来源 游戏原型 爆破任务 MissionDemolition 是一款核心机制类似于愤怒的小鸟的游戏,玩家将用弹弓发射炮弹,摧毁城堡 ...

  3. CCF 2016-12-1 中间数

    CCF 2016-12-1 中间数 题目 问题描述 在一个整数序列a1, a2, -, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数.在一个序列中,可能存在多个下标不相 ...

  4. 1)NET CORE 重新认识 .net & .net core

    最近想系统性的学习下.net core ,在这之前我想再重新的认识下.net ,以及跟.net core 的区别. 有些我们开发.net经常用到的词汇可能还不是很了解,或者不能清晰的出他们的关系与却别 ...

  5. 转 C# 使用openssl

    //先用大整数来生成一个1024bit的密钥对 RSA rsa = new RSA(); BigNumber number = OpenSSL.Core.Random.Next(10, 10, 1); ...

  6. ColdFusion 编写WebService 示例

    1.开发 Web Services,编写cfcdemo.cfc组件,代码如下: <cfcomponent style ="document" namespace = &quo ...

  7. Node笔记(新手入门必看)

    . 初识Node.js 1.1 Node.js是什么 Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. ...

  8. python 数据类型 常用法方

    python 数据类型 常用法方 upper() 大写 str lower() 小写 str strip() rstrip() lstrip() 去除字符两边的空格 去右边 左边空白 str repl ...

  9. Android架构组件——ViewModel

    概述 ViewModel,从字面上理解的话,它肯定是跟视图(View)以及数据(Model)相关的.正像它字面意思一样,它是负责准备和管理和UI组件(Fragment/Activity)相关的数据类, ...

  10. AutoMapper 初次使用心得

    本例以asp.net webform为例: 结构: 主要代码:AutoMapperConfig 类 public class AutoMapperConfig { public static void ...