在qt.conf一节中我们知道qt.conf是一个ini格式文件,Qt内部使用QSettings这个类来解析和保存qt.conf中的配置。
先来看一个QSettings的使用范例:
#include
#include
#include
int main(int argc, char* argv[]){
QCoreApplication app(argc, argv);
QString filepath = QCoreApplication::applicationDirPath() + "/test.ini";
QSettings writer(filepath, QSettings::IniFormat);
writer.beginGroup("UI");
writer.setValue("x", "0");
writer.setValue("y", "0");
writer.setValue("w", "1280");
writer.setValue("h", "720");
writer.endGroup();
writer.beginGroup("HTTP");
writer.setValue("ip", "127.0.0.1");
writer.setValue("port", "80");
writer.endGroup();
QSettings reader(filepath, QSettings::IniFormat);
reader.beginGroup("UI");
qDebug() << reader.value("x");
qDebug() << reader.value("y");
qDebug() << reader.value("w");
qDebug() << reader.value("h");
reader.endGroup();
reader.beginGroup("HTTP");
qDebug() << reader.value("ip");
qDebug() << reader.value("port");
reader.endGroup();
// qDebug() << reader.value("UI/x");
// qDebug() << reader.value("UI/y");
// qDebug() << reader.value("UI/w");
// qDebug() << reader.value("UI/h");
return 0;
}
编译运行程序后,在应用程序所在目录生成了test.ini文件,文件内容如下:
[UI]
x=0
y=0
w=1280
h=720
[HTTP]
ip=127.0.0.1
port=80
这就是一个典型的ini格式文件,形式如
[section]
key=value
在QSettings的使用上,我们可以这么写
set.beginGroup("section");
set.setValue("key", "value");
QString value = set.value("key").toString();
set.endGroup();
也可以这么写:
set.setValue("section/key", "value");
QString value = set.value("section/key").toString();
除了IniFormat格式外,还有一种NativeFormat本地格式,不同的操作系统默认的NativeFormat不同,在windows下默认为注册表,linux下其实就是ini文件,只是扩展名是.conf。
在QSettings的源码中,实际靠两个类来读写配置:
QConfFileSettingsPrivate用来读写ini文件,
QWinRTSettingsPrivate用来读写windows系统的注册表
有兴趣的可以去研究下QConfFileSettingsPrivate的readIniFile和writeIniFile函数。
通过QSettings类,我们就能在不使用数据库的情况下,很方便地保存一些简单的程序配置。