Part1: Summary
项目中我们常用到命名,使用 enum 转成 string ,方便简洁;Qt给我们提供了一个很方便的功能 Q_ENUM,可以实现枚举字符串互转;
Q_ENUM宏将枚举注册到元对象系统中;
QMetaEnum::fromType获取枚举的 QMetaEnum对象;
valueToKey或 keyToValue进行转换操作
下面我们看一下具体应用;
cpp
public:
enum DisplayPart
{
Head= 100,
Hand,
Neck,
Leg
};
Q_ENUM(DisplayPart);
Part2: enum to string
cpp
QMetaEnum metaPart = QMetaEnum::fromType<DisplayPart>();
qDebug()<<"show :"<<metaPart.valueToKey(Head);
输出:show : Head
Part3: string to enum
cpp
QMetaEnum metaPart = QMetaEnum::fromType<DisplayPart>();
qDebug()<<"show :"<<metaPart.keyToValue("Head");
输出:show : 100
Part3: 使用模板
cpp
template <typename T>
static T strToEnm(QString str)
{
QMetaEnum metaEnm = QMetaEnum::fromType<T>();
return (T)metaEnm.keyToValue(str.toStdString().data());
}
template <typename T>
static QString enmToStr(T value)
{
QMetaEnum metaEnm = QMetaEnum::fromType<T>();
return metaEnm.valueToKey(value);
}
Part4: Test
cpp
enum to string
qDebug()<<"show :"<<enmToStr<DisplayPart>(Head);
输出:show : Head
cpp
DisplayPart part = strToEnm<DisplayPart>("Head");
qDebug()<<"show :"<<(int)part;
输出:show : 100