前回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