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

我会这样做:

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

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 回答
0

使用 QSettings 读取 ini 文件,同时显示所需 ini 文件的格式\n alphabet.ini 的格式:

[A_SECTION]
AA=20
BB=40
CC=0

[B_SECTION]
DD=100
EE=270
FF=3000

阅读 alphabet.ini 的简单代码:

QSettings settings("C:\\Qt\\qtcreator-2.5.2\\testingProg\\alphabet.ini",QSettings::IniFormat);

settings.beginGroup("A_SECTION");
const QStringList AchildKeys = settings.childKeys();
QHash<QString, QString> Avalues;
foreach (const QString &childKey, AchildKeys)
 {
     Avalues.insert(childKey, settings.value(childKey).toString());
     qDebug() << childKey << " : " <<settings.value(childKey).toString();
 }
settings.endGroup();
qDebug() << ";

settings.beginGroup("B_SECTION");
const QStringList BchildKeys = settings.childKeys();
QHash<QString, QString> Bvalues;
foreach (const QString &childKey, BchildKeys)
 {
     Bvalues.insert(childKey, settings.value(childKey).toString());
     qDebug() << childKey << " : " <<settings.value(childKey).toString();
 }
settings.endGroup();

输出:

"AA"  :  "20"
"BB"  :  "40"
"CC"  :  "0"

"DD"  :  "100"
"EE"  :  "270"
"FF"  :  "3000"
于 2021-08-11T13:23:43.780 回答