2013-04-27 39 views
4

我想使用QSettings來保存高分但它不能正常工作。我正在保存並在2個不同的文件中讀取這些值。如何正確使用QSettings

這是我的代碼負責增加值到數組:

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

回答

7

我會做這樣的:

讓的說,我們有兩個功能 類的成員加載並保存得分 以使用註冊表,您必須指定應用程序名稱和編輯器:

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

使用一個文件,你必須提供的文件路徑和格式:

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

從您的代碼和文檔,成員函數將 如下 類countains矢量的得分(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(); 
} 

,但你可以刪除它們

+1

不錯的答案,但你缺少['iSettings-> endArray()'](http://doc.qt.io/qt-4.8/qsettings.html#endArray) – 2016-01-25 15:00:00

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()。