2014-04-03 48 views
5

Enum sınıfları, QVariants ve QSettings sınıfı ile ilgili bir sorunum var. QSettings örneğine giden bir QVariant içinde saklamak istediğim enum sınıfı değerleri vardır. bir onaylama işlemi atlar ve şikayet kodunu çalıştırmadan bu noktasındaenum sınıfı

enum class Foo 
{ 
    Bar1, Bar2 
} 
Q_ENUMS(Foo) 
Q_DECLARE_METATYPE(Foo) 

... 

Foo value = Bar2; 
QSettings settings; 
settings.setValue(QString("Foo"), QVariant::fromValue(value)); 

: Yani, benim kod aslında şuna benzer

ASSERT failure in QVariant::save: "Invalid type to save", file kernel\qvariant.cpp 

internet arama, ben sınıf olduğunu öğrendim uygun bir < < ve >> operatör eksik. Fakat bu enum sınıfları için bir seçenek değildir. Hatta

qRegisterMetaType<Foo>("Foo"); 

'u kullanmayı denedim, ancak yardımcı olmadı. Belki benim için başka önerileriniz var. Teşekkürler! o işaretsiz dönüştürmek olacaktır maskeli imzasız ints olan

cevap

3

Enums, bir sorun gibi görünüyor, muhtemelen burada

Qt4 QSettings save enumeration value (for example Qt::CheckState)

orada

çözüm ve gör. Enum için static_cast sonucunun geçerli olup olmadığını kontrol etmek için, enum aralığının başına ve sonuna Foo_lowest ve Foo_highest değerlerini ekleyebilirsiniz.

+0

Haklısınız, bu QVariants'daki enumlarla ilgili bir sorundur. Orijinal uygulamam QVariant'daki gerçek (işaretsiz) tamsayı değerlerini kaydetmekti. Şimdi kapsamdaki enumları denedim, ancak QVariants ile bu problemi yaşadım. Ancak, enumdaki en düşük/en yüksek değere sahip numaranızla orijinal uygulamaya geri döndüm. Teşekkürler. – CppChris