2010-01-20 3 views
3

je veux enregistrer l'état de QCheckBok dans QSetting, je peux mouler sa valeur à int mais peut-être existe méthode plus simple et appropriée pour le faire?Qt4 QSettings enregistrer la valeur d'énumération (par exemple Qt :: CheckState)

voici mon code:

QSetting setting; 
Qt::CheckState checkState; 
//... 
checkState = (Qt::CheckState)setting.value("checkState", Qt::Unchecked).toUInt(); 
//... 
setting.setValue("checkState", (uint)checkState); 
setting.sync(); 

Répondre

3

Tout d'abord, essayez d'éviter de style C jette. Par exemple, remplacez la ligne suivante:

checkState = (Qt::CheckState)setting.value("checkState", Qt::Unchecked).toUInt(); 

avec ceci:

checkState = static_cast<Qt::CheckState>(setting.value("checkState", Qt::Unchecked).toUint()); 

La ligne où vous lancez checkState à un uint devrait également être modifiée.

Deuxièmement, QSettings s'appuie sur QVariant pour définir et récupérer des valeurs. QVariant peut généralement être développé pour prendre en charge des types supplémentaires à l'aide de la macro Q_DECLARE_METATYPE. Voici la documentation:

http://doc.trolltech.com/4.6/qmetatype.html#Q_DECLARE_METATYPE

Cependant, ce mécanisme ne semble pas fonctionner correctement avec énumérations (lorsque vous appelez la fonction membre value() sur QVariant). Donc ce que vous avez en ce moment (moins la coulée de style C) est bien.