目录
在QT中提供了QSettings类,简化了读写配置文件的过程。
在QT中提供了QSettings类,简化了读写配置文件的过程。
settings.beginGroup()
在学习实现获取所有内置目录,看到代码是这样的:
QSettings settings(M_ConfigIniFile,QSettings::IniFormat);
settings.beginGroup("Directories");
auto childKeys = settings.childKeys();
QVariantMap revMap;
for(int i=0; i<childKeys.size(); ++i){
auto cKey = childKeys.at(i);
revMap.insert(cKey,settings.value(cKey));
}
对beginGroup()这个函数有些不太清楚,帮助文档里对beginGroup()是这样解释的:
看完感觉好像明白了,又好像没明白。
知道看到一篇知乎的介绍(QT学习之如何读写配置文件(QSettings) (zhihu.com)),才终于清楚了。原来是我没有明白配置文件的组成。
重点,配置文件长这样
- [ ]声明的就是一个Group,[ ]里的就是Group的名字
- Group的内容以键值对的形式存储,等号左边是key,右边是value
在理解配置文件组成后,再回去看代码,就发现其实很好理解了。
beginGroup()是选择具体的Group名,进而对Group进行操作。
QSettings *settings = new QSettings("/home/qt_pro/Qsettings/QsettingsTest/setting.ini",QSettings::IniFormat);
//Read
settings->beginGroup("QT");
QString LEARN_OBJECT = settings->value("LEARN_OBJECT","").toString();
double VERSION = settings->value("QT_VERSION",-1).toDouble();
qDebug()<<"LEARN_OBJECT="<<LEARN_OBJECT<<endl;
qDebug()<<"QT_VERSION="<<VERSION<<endl;
settings->endGroup();
//Write
settings->beginGroup("MAIN");
settings->setValue("CSDN_TITLE","QingXun");
settings->endGroup();
settings->beginGroup("OTHER");
settings->setValue("CSDN_DESCRIPTION","Share My Learning exprience");
settings->endGroup();
childKeys()
在QSettings里有一个函数可以获取顶层的所有keys,对有较多值得Group遍历十分方便。值得注意得是,在说明文档中也提到了。返回得时顶层得keys,像fridge的keys就不会被返回,因为不属于顶层(有点类似与嵌套),除非你进入fridge的Group然后调用childkeys才会返回fridge的keys。