2

QSettings.iniファイルからいくつかを読みました:

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

これはあるオブジェクトに渡されます。ただし、コピーQSettings* s2= new QSettings(settingsDocRoot);を実行して特定の値を変更しますs2->setValue("path", whateverNewPath);

基本的に、少し変更したQSettingsオブジェクトを別のオブジェクトに渡します。しかし、元のiniファイルが変更された値( )で更新されないようにするにはどうすればよいs2->setValueですか?

1つのアイデアは、単にパスを「」に設定することでした。ただし、QSettingsによると、iniファイルの場所はどこにありますか?次に、デフォルトの場所が想定されます(OK、元のファイルは変更されませんが、不要なファイルが書き込まれます)。

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 に答える