Qtをメインに、プログラムやITに関する情報を発信

Qtの戯言

その他

QtでINIファイルを使用する

投稿日:

QSettings

QSettingsクラスを使用することで、アプリケーションの設定を保存/取得することができます。
デフォルトでは(Windowsの場合)レジストリに対して読み書きしますが、フォーマットを指定することで、INIファイルを扱うことも可能です。
INIファイル内にShift-JISの日本語が含まれる場合の例も踏まえて、サンプルを掲載します。

 

サンプル

  1. INIファイルが無い状態でアプリを起動
  2. デフォルト値を生成し、画面に表示
  3. 画面で値変更し、アプリ終了
  4. アプリ終了時に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

 

-その他
-, ,

Copyright© Qtの戯言 , 2020 All Rights Reserved Powered by STINGER.