2013-04-27 1 views
4

Je souhaite utiliser QSettings pour enregistrer les meilleurs scores, mais cela ne fonctionne pas correctement. Je sauvegarde et lis ces valeurs dans 2 fichiers différents.Comment utiliser correctement QSettings

C'est mon code responsable de l'ajout des valeurs dans un tableau:

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

et lecture:

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); 

Répondre

7

je le ferais comme ceci:

Disons que nous avons deux fonctions membre d'une classe pour charger et enregistrer les scores pour utiliser le registre, vous devez spécifier le nom de l'application et l'éditeur:

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

utiliser un fichier, vous devez fournir le chemin du fichier et format:

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

de votre code et la documentation, la fonction membre serait comme suivre la classe countains un vecteur des scores (QVector mScores)

fonction

pour enregistrer les scores:

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(); 
} 
fonction

pour charger les scores

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(); 
} 

J'utilise des groupes pour assurer une meilleure visibilité dans le fichier de sauvegarde, mais vous pouvez les supprimer

+1

Bonne réponse, mais il vous manque ['iSettings-> endArray()'] (http://doc.qt.io/qt-4.8/qsettings.html#endArray) –

2

Le beginReadArray() après beginWriteArray() est à l'origine du problème. Pour ce faire:

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

Notez que vous devez appeler endArray() lorsque vous avez terminé.

Questions connexes