2012-01-14 108 views
0

我正在編寫一個程序,將其所有設置存儲在QSettings對象中。現在我想讓用戶隨時更改他的數據的存儲位置。可見,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; 
}