Qt--QSettings


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のソースコードでは、実際には2つのクラスで読み書き構成されています.
QConfFileSettingsPrivateはiniファイルの読み書き、QWinRTSettingsPrivateはwindowsシステムのレジストリの読み書きに使用されます
QConfFileSettingsPrivateのreadIniFileとwriteIniFile関数を研究することに興味があります.
QSettingsクラスでは、データベースを使用せずに簡単なプログラム構成を簡単に保存できます.