2013-01-16 4 views

答えて

7

それはあなたの設定がをファイルを使用します方法に依存します。アプリケーションのユーザーにを動的に許可しますか?ファイル(.iniファイルなど)の設定を動的に変更しますか?または、設定はGUIによって設定する必要がありますか?

GUIを使用して設定を変更している場合は、たとえばアプリケーションの開始時に静的クラスからメイン設定を読み込むことをお勧めします。

void SettingsManager::loadSettings() 
{ 
    // .ini format example 
    QSettings settings(FileName, QSettings::IniFormat); 

    IntegerSetting = settings.value("SettingName", default).toInt(); 
    BooleanSetting = settings.value("SettingName", default).toBool(); 

    // ... 
} 

その後、オンデマンドためQSettings最適化のあなたの変更した値を保存することは問題ありません。

/** 
    * key is your setting name 
    * variant is your value (could be string, integer, boolean, etc.) 
    */ 
void SettingsManager::writeSetting(const QString &key, const QVariant &variant) 
{ 
    QSettings settings(FileName, QSettings::IniFormat); 

    settings.setValue(key, variant); 
} 
3

あなたは、インターフェイスの背後にある各論理グループを設定することができます。その後、QSettingsを使用してオンデマンドで設定を取得する具体的なクラスを作成します。

パフォーマンスのボトルネックと判断された場合は、設定をキャッシュする具体的なクラスを作成します。 QSettingsは常に十分に速いです。

2

QSettingsのドキュメントでは、実際に最適化されていると言われています。

内部的には、QStringのマップをQVariantに保持します。すべてのアクセサメソッドは非常に便利で使いやすくなっています。

私はQSettingsを使用したとき、私はreadSettings()writeSettings()の関数でそれらの例と同様に設定しました。このexampleを参照してください。

私がreadSettings()と呼ぶ瞬間、QSettingsオブジェクトが作成され、要求に応じて値がロードされ、すべての設定が構造体に保持されます。

私の主な機能では、アプリケーション名と組織名を設定し、QSettings::setFormatも使用してから、QSettingsにアクセスするたびに、デフォルトのパラメータでQSettingsのインスタンスを作成し、設定にアクセスします。

QSettings s; 
int val = s.value("Some_Group/some_setting", default_value).toInt(); 

// ... 

s.setValue("Some_Group/some_setting", val);