2010-01-20 74 views
3

我想在QSetting中保存QCheckBok的狀態,我可以將它的值轉換爲int,但也許存在更簡單和適當的方法來做到這一點?Qt4 QSettings保存枚舉值(例如Qt :: CheckState)

這裏是我的代碼:

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

回答

3

首先,儘量避免C-風格的轉換。例如,替換下面的行:

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

與此:

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

,你投checkStateuint線也應該有所改變。其次,QSettings依賴於QVariant來設置和檢索值。 QVariant通常可以擴展爲使用Q_DECLARE_METATYPE宏支持其他類型。這裏的文檔:

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

然而,這種機制似乎並沒有與枚舉正常工作(當你調用的QVariant的value()成員函數)。所以你現在所擁有的(減去C風格的演員)是好的。