QSettings
QSettingsクラスを使用することで、アプリケーションの設定を保存/取得することができます。
デフォルトでは(Windowsの場合)レジストリに対して読み書きしますが、フォーマットを指定することで、INIファイルを扱うことも可能です。
INIファイル内にShift-JISの日本語が含まれる場合の例も踏まえて、サンプルを掲載します。
サンプル
- INIファイルが無い状態でアプリを起動
- デフォルト値を生成し、画面に表示
- 画面で値変更し、アプリ終了
- アプリ終了時にINIファイルに保存
上記を行うサンプルです。
デザイン。
コード。
#include <QSettings> #include <QTextCodec> #include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget), strVal(QString()), intVal(0) { ui->setupUi(this); fileName = QString::fromLocal8Bit("sample.ini"); strKey = QString::fromLocal8Bit("STR"); intKey = QString::fromLocal8Bit("INT"); // INIファイル「sample.ini」をShift-JISとしてオープンする QSettings settings(fileName, QSettings::IniFormat); settings.setIniCodec(QTextCodec::codecForName("Shift-JIS")); // 値を取得する(ファイルが無いor項目が無い場合、第二引数のデフォルト値が返される) strVal = settings.value(strKey, "default string").toString(); intVal = settings.value(intKey, -1).toInt(); ui->strValEdit->setText(strVal); ui->intValEdit->setText(QString::number(intVal)); } Widget::~Widget() { strVal = ui->strValEdit->text(); intVal = ui->intValEdit->text().toInt(); // INIファイル「sample.ini」をShift-JISとしてオープンし、値を書き込む QSettings settings(fileName, QSettings::IniFormat); settings.setIniCodec(QTextCodec::codecForName("Shift-JIS")); settings.setValue(strKey, strVal); settings.setValue(intKey, intVal); delete ui; }
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = nullptr); ~Widget(); private: Ui::Widget *ui; QString fileName; QString strKey; QString intKey; QString strVal; int intVal; }; #endif // WIDGET_H
アプリ起動。
(INIファイルが無いため、デフォルト値が表示される)
画面上で値を変更。
アプリを終了し、INIファイルの内容を確認。
[General] STR=あいうえお INT=10000