覚え書きブログ

Qtの覚え書き(設定読み込みとsplit)

前回Windows C++での設定ファイルの読み込み方法を紹介したが、QtソフトウェアではWindowsに強く依存するコーディングは思想的に好ましくないので、Qt独自の設定ファイル読み込みを用いた方がよい。
hirotaka-hachiya.hatenablog.com


QtではQSettingsというクラスを用いる。
http://doc.qt.io/qt-4.8/qsettings.html

設定ファイルが以下のように記述されているとすると、Qtでは以下のように設定ファイルを読み込むことができる。
【test.ini】

[server]
ipAddress=192.168.11.4
controlPorts=7777,8888
#include <QSettings>

QSettings settings(".\\test.ini",QSettings::IniFormat);
settings.beginGroup("server");
QString ipAddress = settings.value("ipAddress","127.0.0.1").toString();
QString controlPorts = quint16(settings.value("controlPorts","7777").toString());
settings.endGroup();

WINAPIと比べると非常にすっきり書けるのがうれしい。ちなみに、beginGroupとendGroupは、取り扱うグループを設定および解放する。また、value関数は、設定されたグループのkeyの設定値を出力する。keyが存在しない場合はdefaultValueを返す。
QVariant value(const QString & key, const QVariant & defaultValue = QVariant())

なお、今回controlPortには「7777,8888」と複数のポート番号が設定されている。この複数のポート番号がQStringとしてcontrolPortに入れているわけだが、今回はQString::splitを用いてカンマ(,)で分解して、各ポート番号を取り出す。

QStringList controlPortList = control.split(",");

for(QString controlPort: controlPortList)
  qDebug << "controlPort:" << controlPort.toInt();

ここで、QStringListは、QStringをコンテナとして持つQListであり、QListはSTLのようなiteratorを採用しているため、上記のようにシンプルにforを記述できる。
http://www.ics.com/files/qtdocs/qlist.html#details