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打開文件,只需將文件路徑及文件格式傳入即可(下方代碼運行完畢,ini文件則會更新,若文件不存在,會自動創(chuàng)建)
//創(chuàng)建QSettings對象并指定ini文件路徑并將格式設置為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");
//設置當前分組結束
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文件路徑并將格式設置為ini
QSettings setting("./iniTest.ini", QSettings::IniFormat);
//讀取ini文件內(nèi)容的第一種方法
qDebug() << "第一種讀取方法";
foreach (QString key, setting.allKeys())
{
//將當前的鍵值對打印輸出
qDebug() << key << setting.value(key).toString();
}
3.2 第二種讀取方式
好處:能指定讀取某一組的內(nèi)容
壞處:步驟相較第一種方式更加繁瑣
//創(chuàng)建QSettings對象并指定ini文件路徑并將格式設置為ini
QSettings setting("./iniTest.ini", QSettings::IniFormat);
qDebug() << "第二種讀取方法";
//獲取ini文件中所有的組
QStringList groupList = setting.childGroups();
//指定讀取某組的數(shù)據(jù)
setting.beginGroup(groupList[1]);
//遍歷該組的鍵
foreach (QString key, setting.childKeys())
{
//將當前的鍵值對打印輸出
qDebug() << key << setting.value(key).toString();
}
3.3 讀取結果示例
下方為兩種讀取方法輸出示例

補充:獲取所有節(jié)點和key以及節(jié)點的遍歷
添加一些數(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é)點和key
QStringList str = fileSetting->allKeys();
qDebug() <<"allKeys : " << str << endl;
foreach(QString key,str)
{
qDebug() << fileSetting->value(key).toString()<< endl;// 讀取 savePath 的值
}
打印結果
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é)點 ( childGroups )
// 獲取所有節(jié)點
QStringList str1 = fileSetting->childGroups();
qDebug() <<"childGroups : " << str1 << endl;
打印結果為 : childGroups : ("fileSave", "ip", "port")
3. 遍歷一個節(jié)點 "ip" 下所有 key的值 ( beginGroup + allKeys + endGroup )
注意
1) 代碼中直接使用了 "key" ( value( key ).toString() )
2) beginGroup 使用完后, 一定要用 endGroup() , 不然后面 settings 將無法使用
// 獲取一個節(jié)點下的key值
fileSetting->beginGroup("ip"); // 設置查找節(jié)點
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(); // 結束掉Group
打印結果如下:
ip -- allKeys : ("first", "second")
"first" : "192.168.0.1"
"second" : "127.0.0.1"
4. 刪除操作:
- contains() 判斷一個指定的鍵是否存在
- remove() 刪除相關的鍵
- clear() 刪除所有鍵
fileSetting->beginGroup("ip"); // 設置查找節(jié)點
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(); // 結束掉Group
相關文章
總結
到此這篇關于Qt讀寫ini文件(含源碼+注釋)的文章就介紹到這了,更多相關Qt讀寫ini文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++?JSON庫?nlohmann::basic_json::accept的用法解析
nlohmann::basic_json::accept 是 Nlohmann JSON 庫中的一個方法,它用于檢查一個字符串是否可以解析為有效的 JSON,這篇文章主要介紹了C++?JSON庫nlohmann::basic_json::accept的用法,需要的朋友可以參考下2023-06-06
Qt連接MySQL數(shù)據(jù)庫的實現(xiàn)(保姆級成功版教程)
本文主要介紹了Qt連接MySQL數(shù)據(jù)庫的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06
QT委托代理機制之Model?View?Delegate使用方法詳解
這篇文章主要介紹了QT委托代理機制之Model?View?Delegate的使用方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-08-08

