【问题标题】:Qt4 QSettings save enumeration value (for example Qt::CheckState)Qt4 QSettings保存枚举值(例如Qt::CheckState)
【发布时间】:2010-01-20 16:26:09
【问题描述】:

我想在 QSetting 中保存 QCheckBok 的状态,我可以将其值转换为 int 但也许存在更简单和正确的方法来做到这一点?

这是我的代码:

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

【问题讨论】:

    标签: qt4 settings enumeration


    【解决方案1】:

    首先,尽量避免 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 来设置和检索值。 QVariant 通常可以使用 Q_DECLARE_METATYPE 宏扩展以支持其他类型。这是文档:

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

    但是,这种机制似乎不适用于枚举(当您在 QVariant 上调用 value() 成员函数时)。所以你现在拥有的(减去 C 风格的转换)很好。

    【讨论】:

      猜你喜欢
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      相关资源
      最近更新 更多