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;
運行效果如下: