如何正确使用QSettings

fal*_*tto 6 qt qsettings

我想用来QSettings保存高分,但它无法正常工作.我正在保存并在2个不同的文件中读取这些值.

这是我负责将值添加到数组中的代码:

QSettings settings;
settings.beginWriteArray("results");
int size = settings.beginReadArray("results");
settings.setArrayIndex(size);
settings.setValue("result", "qwerty");
Run Code Online (Sandbox Code Playgroud)

和阅读:

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);
Run Code Online (Sandbox Code Playgroud)

use*_*716 7

我会这样做:

让我们说我们有一个类的两个函数成员来加载和保存分数.要使用注册表,您必须指定应用程序名称和编辑器:

QSettings settings("<MyEditorName>","<myAppName>");
saveScores(&settings);
loadScores(&settings);
Run Code Online (Sandbox Code Playgroud)

要使用文件,您必须提供文件路径和格式:

QSettings settings("<filepath>",QSettings::iniFormat);
saveScores(&settings);
loadScores(&settings);
Run Code Online (Sandbox Code Playgroud)

从您的代码和文档; 成员函数如下.该类计算得分矢量(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();
}
Run Code Online (Sandbox Code Playgroud)

加载分数的功能

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();
}
Run Code Online (Sandbox Code Playgroud)

我正在使用组来提供保存文件中更好的可见性,但您可以删除它们