memo

プログラミング備忘録

【Qt】iniファイル読む

todo

  • iniファイルがあったら読む
  • カレントディレクトリにiniを置いた
  • ファイル名は"Pika.ini"

 

iniファイルの中身は下記のようにしてます。

# Pika.ini(カレントディレクトリにある)

 [POKEMON1]
PIKACHU = 1

 

[POKEMON1] ... セクション

PIKACHU ... キー(パラメータ) 

 

カレントディレクトリのパスを取得 

QDir::currentPath();でカレントディレクトリを取得します。

iniファイルの名前を合成して、

C:カレントディレクトリ/Pika.ini を取得します。

    QString path = QDir::currentPath();
    path += "/Pika.ini";
    qDebug("%s",qPrintable(path));
 
    pikaNum = 0;
    if(existPika(path)){
        readPika(path);
    }

 

pikaNumはクラス変数 int PikaNumです。

PIKACHUキーで取得した値を入れます。

もし読めない場合は0としたいので、4行目で初期値0を入れました。

 

5行目で、iniファイルが存在しているか確認しています。

6行目は、存在していたらiniファイルを読んで、キーの値を入れます。

iniファイルがない場合は何もしません。

 

iniファイル有無

    if(existPika(path)){ 

関数の中身

bool Pika::existPika(QString path)
{
    QFile file(path);
    if(file.exists()){
        return true;
    }
 
    return false;
}

QFile型にして、ファイルがあったらtrue

ファイルがなかったらfalseを返す関数

 

iniファイルを読む

iniファイルは、他のファイルのように読めると思うのですが、せっかく便利そうなクラスがあるのでこれ(QSettings)を使います。

readPika(path);

関数の中身

void Pika::readPika(QString path)
{
    QSettings settings(path, QSettings::IniFormat);
 
    settings.beginGroup("POKEMON1");
    pikaNum = settings.value("PIKACHU").toInt();
    settings.endGroup();
 
    qDebug("num=%d",pikaNum);
}

beginGroupでセクションを指定

読み終わったらendGroup()

他のセクションのキーを読みたい場合は、これの繰り返し

settings.value()はQVariant型なのでintに変換してあげる必要がありました。

 

無事、アプリケーション出力画面で

num=1

と出力されました。

 

インクルード

#include <QDir>
#include <QFile>
#include <QSettings>

 

QSettings Class | Qt Core 5.11

 

じゃあの