2012-10-26 70 views
2

,我讀了一個.ini文件部分QSettingsQSettings:複製,修改但要避免改變底層的.ini文件

QSettings* settingsDocRoot=new QSettings(_settingsFile ,QSettings::IniFormat, parent); 

它傳遞給某個對象。但是,我然後做一份QSettings* s2= new QSettings(settingsDocRoot);和修改一個特定值s2->setValue("path", whateverNewPath);

基本上我想稍微修改QSettings對象傳遞到另一個對象。但我如何避免原始ini文件更新與更改值(s2->setValue)?

一個想法是,簡單地將路徑設置爲「」。但是,根據QSettings - where is the location of the ini file?則假設默認位置(OK,原始文件不會被更改,但不必要的文件將被寫入)。

回答

2

我目前做如下:

QSettings* settingsWsNaviGraph = new QSettings(settingsDocRoot); 
    // avoid writing to file 
    settingsWsNaviGraph->setPath(QSettings::InvalidFormat, QSettings::UserScope, ""); 

這骯髒的黑客似乎在迴避寫作,至少我原來的文件保持不變,我看不出有任何不必要的文件,但(如果我找到一個會報告)。

如果這裏不工作,我會嘗試用虛假信息的讀/寫方法來註冊自己的格式。見here

1

QSettings完全爲持久性而設計。如果你不想讓你的副本寫入到磁盤,你可能會更好所有的值複製到一個QHash和傳遞,爲您的其他對象:

QHash<QString, QVariant> hash; 
const QStringList keys = settings->allKeys(); 
Q_FOREACH(QString key, keys) { 
    hash[key] = settings->value(key()); 
} 
+0

好主意,需要測試它,因爲我經過QSettings到類,是不是我寫的,不能修改。 –

+0

我沒有看到用QSettings將QHash/QMap傳遞給簽名的方法,對嗎? –