Qt4 QSettings保存枚举值(例如Qt :: CheckState)

时间:2010-01-20 16:26:10

标签: qt4 settings enumeration

我想在QSetting中保存QCheckBok的状态,我可以将它的值转换为int但是可能存在更简单和正确的方法吗?

这是我的代码:

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

1 个答案:

答案 0 :(得分:3)

首先,尽量避免使用C风格的演员表。例如,替换以下行:

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

用这个:

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

您也应该更改checkState投放到uint的行。

其次,QSettings依靠QVariant来设置和检索值。通常可以使用Q_DECLARE_METATYPE宏扩展QVariant以支持其他类型。这是文档:

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

但是,此机制似乎无法与枚举一起正常工作(当您在QVariant上调用value()成员函数时)。所以你现在所拥有的(减去C风格的演员表)很好。