Qt读取ini文件进行配置:
ini文件
.ini 文件是Initialization File的缩写,即初始化文件。
格式:
ini配置文件由节、键、值组成。
【节】
所有的参数都是以节(section)为单位结合在一起的。所有的section名称都是独占一行,并且section名字都被方括号包围着([和])。在section声明后的所有parameters都属于该section。一个section没有明显的结束标识符,一个section的开始就是上一个section的结束,或者是文件结束。
例如:
[addr]
【参数】
(键=值)
如:
ip=127.0.0.1
port=9527
【注解】
注解使用(;)表示,在分号后面的文字,直到该行结尾都全部为注释。
;addr配置ipv4地址和端口
整体如下:
[addr]
ip=192.168.1.1
port=5768
cvltime=10
user=plote
[system]
system-v=win10
cpu=4
QT读写ini文件内容:
使用QSetting类读写ini文件
//头文件
#include <QSettings>
#include <QString>
#include <QDebug>
QSettings *settings;//申明一个QSetting类函数
settings = new QSettings ("config.ini", QSettings::IniFormat);//构建函数
//参数:参数一为配置文件,一般位于项目文件下,参数二表示针对ini文件格式
写入文件
//向目标文件中的config节的参数ip写入数据192.167.1.1 ini中为ip=192.187.1.1
settings->setValue("/system/user","admin");
settings->setValue("/system/pass","123");
settings->setValue("/system/ipaddress","192.167.1.1");
打开文件效果如下:
读取文件:
首先可以定义一个保存信息的结构体:
struct system_infomation{
char *user;//用户
char *pass;//密码
char *ipaddress;//上位机网络地址
int port;//上位机端口
float cnum;
};
这里常用的数据类似两种,一种是int型,一种是Qstring类型。
//先声明结构体
system_infomation sys;
sys.port=settings->value("/system/port").toInt();
sys.cnum=settings->value("/system/cnum").toFloat();//前面定义的什么类型,后面就转换为什么类型
QString pass=settings->value("/system/pass").toString();
如果是字符串,使用toString将数据转化为QString,注意这里的类型是Qstring,不能char * paw=pass;
sys.pass=settings->value("/system/pass").toString();是错误的,会报错,因为结构体中pass 的定义是char *
如果要将ini中的信息读取保存到char * 类型的结构体中,则涉及到一个类型的转换。
//char *型赋值
QString pass=settings->value("/system/pass").toString();
//sys.pass定义为char*
QByteArray pa=pass.toLatin1();//将Qstring类转换为char *
sys.pass=pa.data();
使用QbyteArray进行转化就可以将信息读取出来了。
还有一种将Qstring转化为char *的方法:
注意此方法要求char * 的定义为 const char *
//Qstring与char * 转化方法2 但是要求char*定义为 const char *
QString pass=settings->value("/system/pass").toString();
std::string str=pass.toStdString();
sys.pass=str.c_str();
这里的sys.pass定义为const char *
在读写完后删除指针
delete settings;
输出
使用qDebug()输出
qDebug() <<"user:"<<sys.pass;
qDebug() <<"user:"<<sys.user;
qDebug() <<"addr:"<<sys.ipaddress;
qDebug() <<"port"<<sys.port;
运行效果如下: