我正在尝试使用Qt反射将枚举转换为QString。

这是代码的一部分:

class ModelApple
{
    Q_GADGET
    Q_ENUMS(AppleType)
public:
    enum AppleType {
      Big,
      Small
    }
}

这是我想要做的:
convertEnumToQString(ModelApple::Big)

返回"Big"
这可能吗?
如果您对convertEnumToQString有任何想法,请分享

最佳答案

您需要使用Q_ENUM宏,该宏在元对象系统中注册一个枚举类型。

enum AppleType {
  Big,
  Small
};
Q_ENUM(AppleType)

现在,您可以使用QMetaEnum类访问有关枚举器的元数据。
QMetaEnum metaEnum = QMetaEnum::fromType<ModelApple::AppleType>();
qDebug() << metaEnum.valueToKey(ModelApple::Big);

这是此实用程序的通用模板:
template<typename QEnum>
std::string QtEnumToString (const QEnum value)
{
  return std::string(QMetaEnum::fromType<QEnum>().valueToKey(value));
}

08-16 00:34