2

QSettings从 .ini 文件中读取了一些内容:

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

这被传递给某个对象。但是,然后我会复制QSettings* s2= new QSettings(settingsDocRoot);并修改一个特定的值s2->setValue("path", whateverNewPath);

基本上我想将稍微修改的QSettings对象传递给另一个对象。但是如何避免使用更改的值(s2->setValue)更新原始 ini 文件?

一个想法是,只需将路径设置为“”。但是,根据QSettings - ini 文件的位置在哪里?然后将假定一个默认位置(好的,原始文件不会被更改,但会写入不必要的文件)。

4

2 回答 2

3

QSettings 完全是为持久性而设计的。如果您不希望将副本写入磁盘,最好将所有值复制到 QHash 并将其传递给其他对象:

QHash<QString, QVariant> hash;
const QStringList keys = settings->allKeys();
Q_FOREACH(QString key, keys) {
  hash[key] = settings->value(key());
}
于 2012-10-26T13:19:15.410 回答
2

我目前正在执行以下操作:

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

这种肮脏的黑客似乎避免了写入,至少我的原始文件保持不变,而且我还没有看到任何不需要的文件(如果我找到了会报告)。

如果这在这里不起作用,我将尝试使用伪造的读/写方法注册我自己的格式。看这里

于 2012-10-27T20:08:18.637 回答