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"); //設置當前分組結(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文件路徑并將格式設置為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é)果示例
下方為兩種讀取方法輸出示例
補充:獲取所有節(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 的值 }
打印結(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é)點 ( childGroups )
// 獲取所有節(jié)點 QStringList str1 = fileSetting->childGroups(); qDebug() <<"childGroups : " << str1 << endl;
打印結(jié)果為 : 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(); // 結(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"); // 設置查找節(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(); // 結(jié)束掉Group
相關(guān)文章
總結(jié)
到此這篇關(guān)于Qt讀寫ini文件(含源碼+注釋)的文章就介紹到這了,更多相關(guān)Qt讀寫ini文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++?JSON庫?nlohmann::basic_json::accept的用法解析
nlohmann::basic_json::accept 是 Nlohmann JSON 庫中的一個方法,它用于檢查一個字符串是否可以解析為有效的 JSON,這篇文章主要介紹了C++?JSON庫nlohmann::basic_json::accept的用法,需要的朋友可以參考下2023-06-06Qt連接MySQL數(shù)據(jù)庫的實現(xiàn)(保姆級成功版教程)
本文主要介紹了Qt連接MySQL數(shù)據(jù)庫的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06C++ 中將一維數(shù)組轉(zhuǎn)成多維的三種方式示例詳解
這篇文章主要介紹了C++ 中將一維數(shù)組轉(zhuǎn)成多維的三種方式,每種方式結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-12-12QT委托代理機制之Model?View?Delegate使用方法詳解
這篇文章主要介紹了QT委托代理機制之Model?View?Delegate的使用方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-08-08