QSettingsを使ったソフト設定の保存

ウインドウの大きさや文字サイズなど次回起動時に復元したい設定はQSettingsクラスを使えば簡単に保存することができます。

例えばソフト終了時に現在のウインドウの幅と高さを記録したければ次のようなコードが書けます。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0)
     : QMainWindow(parent),
       ORG_NAME("MySoft"), APP_NAME("MyAppName"),
       WIN_W_KEY("win_w"), WIN_H_KEY("win_h")
    {
        //ソフト設定を復元する
        QSettings settings(ORG_NAME, APP_NAME);
        int winWidth = settings.value(WIN_W_KEY, 700).toint();
        int winHeight = settings.value(WIN_H_KEY, 500).toint();
        resize(winWidth, winHeight);
    }
    ~MainWindow();

    //ソフトが閉じられたら設定を保存する。
    virtual void closeEvent(QCloseEvent * event){
        int winWidth = width(), winHeight = height();
        QSettings settings(ORG_NAME, APP_NAME);
        settings.setValue(WIN_W_KEY, winWidth);
        settings.setValue(WIN_H_KEY, winHeight);
    }

private:
    //設定した値を取り出すためのキー
    const QString ORG_NAME, APP_NAME;
    const QString WIN_W_KEY, WIN_H_KEY;

};

#endif //MAINWINDOW_H

QSettingのコンストラクタには次のように組織名とソフト名の両方を渡します。

QSettings settings("MySoft", "MyAppName");

そしてsetValueに値のキーとなる文字列と値を渡すことでそのキーに関連付けられて値が保存されます。

値を取り出すときのvalue関数にキーを渡せば値を取り出すことができます。

QSettingsはデストラクターが呼ばれた時点でファイルに設定を保存する仕組みになっていますが、もし明示的に保存したい場合はasyncを呼び出せばOKです。

どのファイルに設定が保存されるかというとWindowsではレジストリーに、MaxやUnixでは実行ファイルのあるフォルダにXMLファイルとして保存されるようです。

もし環境によらずにINIファイルに保存したい場合は次のようにします。

QSettings settings(QSettings::IniFormat, QSettings::SystemScope,
                   "MySoft", "MyAppName");

この場合はINIファイルがユーザーディレクトリに保存されます。

ちなみにWindowsの場合はC:\Users\[ユーザー名]\AppData\Roamingフォルダ以下のMySoft/MyAppNameにINIファイルが保存されるようです。(環境によっては変わるかもしれません。)

関連項目
プライバシーポリシー