2012-01-14 16 views
0

QSettingsオブジェクトにすべての設定を保存するプログラムを作成しています。今私はいつでも自分のデータの保存場所を変更するオプションをユーザーに与えたいと思っています。 Apparantly QSettingsは、スコープを変更し、すべてのデータをレジストリから%APPDATA%のファイルへ新しい場所にコピーする機能を提供しません。QSettings:既存のQSettingsオブジェクトのスコープ/場所を移動/変更します。

私は何を知っている:

  • QSettings :: SETPATHは()建設前に使用され、既存のオブジェクトには影響しません。
  • コピーオペレータはプライベートです。私はQSettingsをサブクラス化することができますが、他のスレッドが同時に書き込むため、コピー操作中に設定が失われてしまうのを恐れています。

プログラム設定を移動して新しい場所に移動するにはどうすればよいですか?可能であればQSettingsでこれを達成したいと思っています。

答えて

0

スレッドセーフなシングルトンラッパークラスはオプションですか?

class Settings { 

public: 
    static Settings& instance() 
    { 
     static Settings* inst = 0; 
     if (!inst) 
      inst = new Settings(); 
     return *inst; 
    } 
    QSettings& getSettings { QMutexLocker(&m_mutex); return *m_settings; } 
    bool migrateLocation(...) 
    { 
     QMutexLocker(&m_mutex); 
     QSettings* newSettings = new QSettings(...new parameters...); 
     //... copy over the stuff 
     delete m_settings; 
     m_settings = newSettings; 
    } 
private: 
    Settings() { m_settings = new QSettings(...); } 

    static QMutex m_mutex; 
    QSettings* m_settings; 
} 
関連する問題