QSettings:移动/更改现有QSettings对象的范围/位置

时间:2012-01-14 14:52:57

标签: c++ qt4 copy move qsettings

我正在编写一个程序,它将所有设置存储在QSettings对象中。现在,我想让用户可以随时更改其数据的存储位置。显然,QSettings无法更改其范围并将其所有数据复制到新位置,例如从注册表到%APPDATA%中的文件。

我所知道的:

  • QSettings :: setPath()在构造之前使用,不会影响现有对象。
  • 复制操作符是私有的。我可以将QSettings子类化,但由于其他线程同时写入,我担心在复制操作期间设置会丢失。

如何将我的程序设置动态移动并保留到新位置?如果可能的话,我真的很想用QSettings实现这个目标。

1 个答案:

答案 0 :(得分: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;
}