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

第二种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文件的更多相关文章
- QT的三种协议说明
关于Qt的三种协议以及是否收费,有以下引文: 引文一: 最近一直在学习 Qt.Qt 有两个许可证:LGPL 和商业协议.这两个协议在现在的 Qt 版本中的代码是完全一致的(潜在含义是,Qt 的早期版本 ...
- Qt学习 之 多线程程序设计(QT通过三种形式提供了对线程的支持)
QT通过三种形式提供了对线程的支持.它们分别是, 一.平台无关的线程类 二.线程安全的事件投递 三.跨线程的信号-槽连接. 这使得开发轻巧的多线程Qt程序更为容易,并能充分利用多处理器机器的优势.多线 ...
- getParameter() getInputStream()和getReader() 区别 这三种方法是有冲突的,因为流只能被读一次。
我们经常用servlet和jsp, 经常用request.getParameter() 来得到数据. request.getParameter()request.getInputStream()req ...
- 【Qt 】QSettings写ini配置文件
QSettings写ini配置文件(Qt版本5.2): #include "inidemo.h" #include <QSettings> #include <Q ...
- json串转化成xml文件、xml文件转换成json串
1.json串转化成xml文件 p=[{"name":"tom","age":30,"sex":"男" ...
- Qt之QDomDocument操作xml文件-模拟ini文件存储
一.背景 不得不说Qt是一个很强大的类库,不管是做项目还是做产品,Qt自身封装的东西就已经非常全面了,我们今天的这篇文章就是模拟了Qt读写ini文件的一个操作,当然是由于一些外力原因,我们决定自己来完 ...
- JdbcTemplae使用入门&&Spring三种连接池配置&&Spring配置文件引用外部properties文件
JdbcTemplate的使用 Spring为了各种支持的持久化技术,都提供了简单操作的模版和回调. JdbcTemplate 简化 JDBC 操作HibernateTemplate 简化 Hiber ...
- Qt中三种解析xml的方式
在下面的随笔中,我会根据xml的结构,给出Qt中解析这个xml的三种方式的代码.虽然,这个代码时通过调用Qt的函数实现的,但是,很多开源的C++解析xml的库,甚至很多其他语言解析xml的库,都和下面 ...
- QT的三种开发方式
最近在学习QT GUI,单纯使用C++硬编码的方式,直接是采用QWidget部件来做,而不是采用QT Designer做UI界面,也不是采用QML+Javascript.单纯使用C++硬编码的方式,缺 ...
随机推荐
- ansible-playbook的简单传参方式
基本语法: ansible-playbook -v -i myhost test.yml -e "name=xiaoming" // -v 是看运行细节.要更细节 ...
- AS3灰色图像
一开始觉得AS3的滤镜很难使用,尤其是那些矩阵,让人望而生畏.最近写一个聊天模块,要用到离线状态下的灰色头像,于是认真研究了ColorMatrixFilter,发现其实也没有那么难.所谓的矩阵其实就是 ...
- [CF724G]Xor-matic Number of the Graph
题目大意:有一张$n$个点$m$条边的无向图,定义三元组$(u,v,s)$是有趣的,当且仅当有一条$u\to v$的路径,路径上所有边的异或和为$s$.问所有有趣的三元组的$s$之和.$n\leqsl ...
- SQL Server中,常用的全局变量
在SQL Server中,全局变量是一种特殊类型的变量,服务器将维护这些变量的值.全局变量以@@前缀开头,不必进行声明,它们属于系统定义的函数.下表就是SQL Server中一些常用的全局变量. 全局 ...
- (转)WEB服务器_IIS配置优化指南
原文地址:https://www.cnblogs.com/heyuquan/p/deploy-iis-set-performance-guide.html 通常把站点发布到IIS上运行正常后,很少会去 ...
- 用PHP写PHP7扩展,超级简单对吧!
[图片打不开,请用代理] 介绍: PHP扩展是编译库,它允许在您的PHP代码中使用特定的功能(主要是使用C编写的php扩展). 例如,您需要使用PHP使用SQLite3,您可以实现自己的方法和功能来连 ...
- VsCode 解决vim插件,不能使用ctrl+c的问题(目标卸载im)
VsCode中,使用VIM插件后,ctrl+c不能用 可以通过 File -> Preference -> Settings中 vim.useCtrlKeys 选项设置为 false ...
- MySQL Backup--xtrabackup与Bulk Load for Create Index
场景描述:主从使用MySQL 5.7.19 1.从库上使用xtrabackup进行热备. 2.主库行执行DDL创建索引: ALTER TABLE `tb_xxx` ADD INDEX idx_good ...
- SQL SERVER-Exclusive access could not be obtained because the database is in use. (Microsoft.SqlServer.SmoExtended)
Q:先在一个实例中恢复一个数据A,然后又想在恢复一次,取别名为A2,这是报异常SQL SERVER-Exclusive access could not be obtained because the ...
- 蓝桥杯-入门训练 :Fibonacci数列
问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1.当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n. ...