Qtで設定ファイルの読み書きを行う。QSettingsクラスを使って行うことができる。

まず、起動したところで組織名やアプリ名を設定する。設定ファイルの保存先や設定ファイル名がこれできまる。ちなみにWidgetクラスのコンストラクタで設定した。

    QCoreApplication::setOrganizationName("Organization");          // 組織名
    QCoreApplication::setOrganizationDomain("organization.com");    // ドメイン
    QCoreApplication::setApplicationName("MyApp");                  // アプリケーション名

    // 設定ファイルの形式
    // レジストリ
//    QSettings::setDefaultFormat(QSettings::NativeFormat);
    // iniファイル
    QSettings::setDefaultFormat(QSettings::IniFormat);

QSettings::setDefaultFormatでiniファイル形式かレジストリに保存するかも設定する。(Windowsの場合)

設定ファイルに値を保存する場合は、次のように行う。(QLineEditを張り付けた環境で試しているのでQLineEditに入力した値を保存するようなコードになっている。)

    // 値を保存するキー
    const QString KEY_VALUE = "Value";
    const QString KEY_HOGE_VALUE = "hoge/Value";

    // 入力した値を保存する。
    QSettings settings;
    settings.setValue(KEY_VALUE, ui->lineEdit->text());
    settings.setValue(KEY_HOGE_VALUE, ui->lineEdit->text());

設定ファイルから値を読み込む場合は、次のように行う。

    // 設定した情報を読み込む。
    QSettings settings;
    QString val = settings.value(KEY_VALUE, "default").toString();
    ui->lineEdit->setText(val);

QSettingのvalueメソッドで読み込む。第2引数はキーが存在しないときに返す値を指定する。

これをWindows10で実行したとき、どこにどのように保存されるかだ。(LinuxやmacOSは、ドキュメントを見てくれ)

IniFormatの場合、"C:\Users\〇〇〇\AppData\Roaming\Organization\MyApp.ini"(〇〇〇はユーザー名)に保存される。内容はこんな感じになる。

[General]
Value=aaa

[hoge]
Value=aaa

NativeFormatの場合、レジストリの"\HKEY_CURRENT_USER\SOFTWARE\Organization\MyApp"のValueにキーhoge/Valueはさらにhogeフォルダに入ってValueに保存される。

ここでは、書かなかったが直接iniファイルを指定して参照したり、ユーザーごとの設定ではなくこのマシンでの設定として参照したりもQSettingsの設定で行うことも可能だ。(そのへんは、ドキュメントを見てくれ)