Qt--QSettings

在qt.conf一节中我们知道qt.conf是一个ini格式文件,Qt内部使用QSettings这个类来解析和保存qt.conf中的配置。

先来看一个QSettings的使用范例:

#include <QDebug>
#include <QSettings>
#include <QCoreApplication>
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类,我们就能在不使用数据库的情况下,很方便地保存一些简单的程序配置。

猜你喜欢

转载自blog.csdn.net/gg_simida/article/details/78721364