我想在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/

10-10 16:55