6

ハイスコ​​アの保存に使いたいのですQSettingsが、うまくいきません。これらの値を2つの異なるファイルに保存して読み取っています。

これは、配列に値を追加する責任がある私のコードです:

QSettings settings;
settings.beginWriteArray("results");
int size = settings.beginReadArray("results");
settings.setArrayIndex(size);
settings.setValue("result", "qwerty");

そして読む:

QSettings settings;
QString tmp = "";
int size = settings.beginReadArray("results");
for(int i = 0; i < size; ++i)
{
    settings.setArrayIndex(i);
    tmp += settings.value("result").toString();
}
ui->label->setText(tmp);
4

3 に答える 3

8

私は次のようにします:

スコアをロードおよび保存するクラスの 2 つの関数メンバーがあるとします。レジストリを使用するには、アプリケーション名とエディターを指定する必要があります。

QSettings settings("<MyEditorName>","<myAppName>");
saveScores(settings);
loadScores(settings);

ファイルを使用するには、ファイル パスと形式を指定する必要があります。

QSettings settings("<filepath>",QSettings::iniFormat);
saveScores(settings);
loadScores(settings);

コードとドキュメントから; メンバー関数は次のようになります。クラスはスコアのベクトルをカウントします (QVector mScores)

スコアを保存する関数:

void myClass::saveScores(QSettings& iSettings)
{
  iSettings.beginGroup("Scores");
  iSettings.beginWriteArray("results");
  for(int i=0; i<mScores.count();i++)
  {
    iSettings.setArrayIndex(i);
    iSettings.setValue("result",mScores[i]);
  }
  iSettings.endArray();
  iSettings.endGroup();
}

スコアを読み込む関数

void myClass::loadScores(QSettings& iSettings)
{
  iSettings.beginGroup("Scores");
  int size = iSettings.beginReadArray("results");
  mScores.resize(size);
  for(int i=0;i<size;i++)
  {
    iSettings.setArrayIndex(i);
    mScores[i] = iSettings->value("results").toInt();
  }
  iSettings.endArray();
  iSettings.endGroup();
}

保存ファイルの可視性を高めるためにグループを使用していますが、グループを削除できます

于 2013-04-27T13:44:28.323 に答える
2

beginWriteArray() の後の beginReadArray() が問題を引き起こしています。これを行う:

QSettings settings;
int size = settings.beginReadArray("results");
settings.endArray();
settings.beginWriteArray("results");
settings.setArrayIndex(size);
settings.setValue("result", "qwerty");
settings.endArray();

終了したら endArray() を呼び出す必要があることに注意してください。

于 2013-04-27T13:47:24.593 に答える