Qt讀寫ini文件的方法詳解(含源碼+注釋)
一、示例Ini文件內(nèi)容
下方為本文所使用的ini文件的內(nèi)容
[group1] key1=val1 key2=val2 sameKay=sameVal [group2] jian1=zhi1 jian2=zhi2 sameKay=sameZhi
二、Ini文件的寫入
ini文件不需要像xml和json一樣需要使用QFile打開文件,只需將文件路徑及文件格式傳入即可(下方代碼運(yùn)行完畢,ini文件則會更新,若文件不存在,會自動創(chuàng)建)
//創(chuàng)建QSettings對象并指定ini文件路徑并將格式設(shè)置為ini
QSettings setting("./iniTest.ini", QSettings::IniFormat);
//創(chuàng)建第一個分組(創(chuàng)建分組的第一種方法)
setting.beginGroup("group1");
//添加第一個分組中的鍵值對
setting.setValue("key1", "val1");
setting.setValue("key2", "val2");
setting.setValue("sameKay", "sameVal");
//設(shè)置當(dāng)前分組結(jié)束
setting.endGroup();
//添加第二個分組以及其鍵值對(創(chuàng)建分組的第二種方法)
setting.setValue("group2/jian1", "zhi1");
setting.setValue("group2/jian2", "zhi2");
setting.setValue("group2/sameKay", "sameZhi");
三、Ini文件的讀取
3.1 第一種讀取方式
好處:步驟不那么繁瑣,代碼簡潔
壞處:不能指定讀取某一組的內(nèi)容,必須讀取ini文件所有內(nèi)容
//創(chuàng)建QSettings對象并指定ini文件路徑并將格式設(shè)置為ini
QSettings setting("./iniTest.ini", QSettings::IniFormat);
//讀取ini文件內(nèi)容的第一種方法
qDebug() << "第一種讀取方法";
foreach (QString key, setting.allKeys())
{
//將當(dāng)前的鍵值對打印輸出
qDebug() << key << setting.value(key).toString();
}
3.2 第二種讀取方式
好處:能指定讀取某一組的內(nèi)容
壞處:步驟相較第一種方式更加繁瑣
//創(chuàng)建QSettings對象并指定ini文件路徑并將格式設(shè)置為ini
QSettings setting("./iniTest.ini", QSettings::IniFormat);
qDebug() << "第二種讀取方法";
//獲取ini文件中所有的組
QStringList groupList = setting.childGroups();
//指定讀取某組的數(shù)據(jù)
setting.beginGroup(groupList[1]);
//遍歷該組的鍵
foreach (QString key, setting.childKeys())
{
//將當(dāng)前的鍵值對打印輸出
qDebug() << key << setting.value(key).toString();
}
3.3 讀取結(jié)果示例
下方為兩種讀取方法輸出示例

補(bǔ)充:獲取所有節(jié)點(diǎn)和key以及節(jié)點(diǎn)的遍歷
添加一些數(shù)據(jù)
void INI_File::setPath(QString filePath)
{
fileSetting->setValue("/fileSave/savePath",filePath); // 保存savePath 的值
// 測試使用
fileSetting->setValue("/ip/first", "192.168.0.1");
fileSetting->setValue("ip/second", "127.0.0.1");
fileSetting->setValue("port/open", "2222");
}
1. 獲取整個 ini 文件所有的 key ( allKeys )
// 獲取所有節(jié)點(diǎn)和key
QStringList str = fileSetting->allKeys();
qDebug() <<"allKeys : " << str << endl;
foreach(QString key,str)
{
qDebug() << fileSetting->value(key).toString()<< endl;// 讀取 savePath 的值
}
打印結(jié)果
allKeys : ("fileSave/savePath", "ip/first", "ip/second", "port/open")
"fileSave/savePath" : "C:/Users/Administrator/Desktop"
"ip/first" : "192.168.0.1"
"ip/second" : "127.0.0.1"
"port/open" : "2222"
2. 獲取所有節(jié)點(diǎn) ( childGroups )
// 獲取所有節(jié)點(diǎn)
QStringList str1 = fileSetting->childGroups();
qDebug() <<"childGroups : " << str1 << endl;
打印結(jié)果為 : childGroups : ("fileSave", "ip", "port")
3. 遍歷一個節(jié)點(diǎn) "ip" 下所有 key的值 ( beginGroup + allKeys + endGroup )
注意
1) 代碼中直接使用了 "key" ( value( key ).toString() )
2) beginGroup 使用完后, 一定要用 endGroup() , 不然后面 settings 將無法使用
// 獲取一個節(jié)點(diǎn)下的key值
fileSetting->beginGroup("ip"); // 設(shè)置查找節(jié)點(diǎn)
QStringList str2 = fileSetting->allKeys(); // 獲取所有的key
qDebug() <<"ip -- allKeys : " << str2 << endl;
foreach(QString key,str2)
{
QString value = fileSetting->value(key).toString(); // 直接用 key 獲取數(shù)據(jù)
qDebug() <<key << " : "<< value << endl;
}
fileSetting->endGroup(); // 結(jié)束掉Group
打印結(jié)果如下:
ip -- allKeys : ("first", "second")
"first" : "192.168.0.1"
"second" : "127.0.0.1"
4. 刪除操作:
- contains() 判斷一個指定的鍵是否存在
- remove() 刪除相關(guān)的鍵
- clear() 刪除所有鍵
fileSetting->beginGroup("ip"); // 設(shè)置查找節(jié)點(diǎn)
QStringList str2 = fileSetting->allKeys(); // 獲取所有的key
qDebug() <<"ip -- allKeys : " << str2 << endl;
foreach(QString key,str2)
{
if (fileSetting->contains(key)) // 判斷"鍵"是否存在
fileSetting->remove(key); // 刪除此鍵
else
{
QString value = fileSetting->value(key).toString(); // 直接用 key 獲取數(shù)據(jù)
qDebug() <<key << " : "<< value << endl;
}
}
fileSetting->endGroup(); // 結(jié)束掉Group
相關(guān)文章
總結(jié)
到此這篇關(guān)于Qt讀寫ini文件(含源碼+注釋)的文章就介紹到這了,更多相關(guān)Qt讀寫ini文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++設(shè)計(jì)模式之建造者模式(Builder)
這篇文章主要介紹了C++設(shè)計(jì)模式之建造者模式Builder的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03
C++指針運(yùn)算符(&和*)的實(shí)現(xiàn)
C++ 提供了兩種指針運(yùn)算符,一種是取地址運(yùn)算符 &,一種是間接尋址運(yùn)算符 *,本文就詳細(xì)的介紹一下這兩種運(yùn)算符的使用,具有一定的參考價值,感興趣的可以了解一下2023-08-08
Matlab實(shí)現(xiàn)繪制高階版本韋恩圖(upset圖)
韋恩圖隨著階數(shù)升高會越來越復(fù)雜,當(dāng)階數(shù)達(dá)到7或者以上時幾乎沒辦法繪制,但是使用upset圖卻可以比較輕易的繪制。本文就來用Matlab實(shí)現(xiàn)繪制upset圖,需要的可以參考一下2023-01-01
C語言實(shí)現(xiàn)清空指定文件夾中所有文件的方法
這篇文章主要介紹了C語言實(shí)現(xiàn)清空指定文件夾中所有文件的方法,實(shí)例分析了C語言實(shí)現(xiàn)文件刪除的相關(guān)技巧,需要的朋友可以參考下2015-06-06

