我想在QSetting中保存QCheckBok的状态,我可以将其值转换为int,但也许存在更简单,更适当的方法来做到这一点?
这是我的代码:
QSetting setting;
Qt::CheckState checkState;
//...
checkState = (Qt::CheckState)setting.value("checkState", Qt::Unchecked).toUInt();
//...
setting.setValue("checkState", (uint)checkState);
setting.sync();
最佳答案
首先,尝试避免使用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样式的强制转换)很好。关于qt4 - Qt4 QSettings保存枚举值(例如Qt::CheckState),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2102971/