2014-04-03 33 views
5

我遇到了enum類,QVariants和QSettings類的問題。有一些枚舉類的值,我想存儲在一個QVariant進入一個QSettings實例。所以,我的代碼實際上看起來是這樣的:在QSettings中的QVariant中的枚舉類

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

... 

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

此時在執行代碼,斷言跳躍和抱怨:

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

搜索互聯網,我發現了類缺少配件< <和>>操作符。但是,這不是一個枚舉類的選項。我甚至試圖使用

qRegisterMetaType<Foo>("Foo"); 

但它沒有幫助。也許你對我有其他建議/解決方案。謝謝!

回答

3

枚舉,這是蒙面的無符號整數,似乎是一個問題,看到

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

的解決方案有很可能是此處將其轉換爲無符號。要檢查返回到枚舉的static_cast結果是否有效,可以將Foo_lowestFoo_highest值添加到枚舉範圍的開始和結尾。

+0

你說得對,這是QVariants中的枚舉問題。我最初的實現是將實際(無符號)整數值保存在QVariant中。現在我嘗試了範圍枚舉,但我遇到了QVariants的這個問題。但是,我轉回原來的實現與你的伎倆在枚舉中的最低/最高值。謝謝。 – CppChris