-
Notifications
You must be signed in to change notification settings - Fork 3
Configuration Utility
Konstanten und globale Konfigurationen die sich zur Laufzeit nicht ändern sollten in eine externe Konfigurationsdatei ausgelagert werden. Für den Zugriff auf derartige Daten stellt das Configuration Utility eine Schnittstelle bereit.
Die aktuelle Konfiguration wird in der Datei res/configuration.json
festgelegt. Die Daten sollen hierzu in einer sinnvollen Hierarchie abgelegt werden, die durch eine JSON-Objekt-Hierarchie abgebildet wird.
Eine beispielhafte Konfigurationsdatei sieht folgendermaßen aus:
{
"globe": {
"radius": 0.5,
"label": "earth"
},
"visualizations": {
"volume": {
"earlyRayTermination": true
}
}
}
Um Werte aus der Konfigurationsdatei zu nutzen, muss das Configuration Utility importiert werden:
#include <Utils/Config/Configuration.hpp>
Daraufhin kann die folgende Schnittstelle verwendet werden:
bool Configuration::getInstance().hasKey(QString key);
QString Configuration::getInstance().getString(QString key);
bool Configuration::getInstance().getBoolean(QString key);
int Configuration::getInstance().getInteger(QString key);
double Configuration::getInstance().getDouble(QString key);
float Configuration::getInstance().getFloat(QString key);
Der Parameter key
ist hierbei der Pfad durch die Objekthierarchie in der JSON-Datei zum jeweiligen Konfigurationsdatum, getrennt durch Punkte.
Da dies wahrscheinlich der einzig gelesene Abschnitt ist weil er die Überschrift "Beispiel" trägt wird hier kurz gezeigt, wie auf die Daten in der obigen JSON-Datei zugegriffen werden kann:
Configuration::getInstance().hasKey("globe.radius"); // true
Configuration::getInstance().getString("globe.label"); // QString("earth")
Configuration::getInstance().getDouble("globe.radius"); // 0.5
Configuration::getInstance().getBoolean("visualizations.volume.earlyRayTermination"); // true
Obwohl die JSON-Datei nur einmalig beim Programmstart eingelesen wird und der Zugriff auf Daten danach relativ effizient über eine QMap
erfolgt sollten die obigen Methoden dennoch eher verwendet werden, um die Konfigurationsdaten nur einmal zu holen und dann in lokale Variablen zu speichern.