利用Qt元对象系统的特性实现对枚举类型与字符串的互相转换功能。
QT+=core
;Car
继承于 QObject
并使用 Q_OBJECT
宏;Color
;Q_ENUM
宏将 Color
枚举注册到元对象系统中;QMetaEnum::fromType
获取枚举的 QMetaEnum
对象;valueToKey
或 keyToValue
进行转换操作。const char *QMetaEnum::valueToKey(int value) const
value
为枚举值;int QMetaEnum::keyToValue(const char *key, bool *ok = nullptr) const
key
为枚举字符串;ok
值为是否转换成功(需要做判断)。Car.h
#include <QObject>
class Car : public QObject
{
Q_OBJECT
public:
Car(QObject *parent = 0) {}
~Car() {}
enum Color { RED, GREEN, BLUE };
Q_ENUM(Color)
};
main.cpp
部分代码QMetaEnum metaColor = QMetaEnum::fromType<Car::Color>();
bool isOk = false;
qDebug()<<metaColor.valueToKey(Car::BLUE);
qDebug()<<metaColor.keyToValue("BLUE", &isOk)<<isOk; // OR
qDebug()<<metaColor.keyToValue("Car::BLUE", &isOk)<<isOk;