利用Qt元对象系统的特性实现对枚举类型与字符串的互相转换功能。
1 使用方法
- 项目文件添加
QT += core
; - 创建类
Car
继承于QObject
并使用Q_OBJECT
宏; - 类内添加枚举
Color
; - 使用
Q_ENUM
宏将Color
枚举注册到元对象系统中; - 使用
QMetaEnum::fromType
获取枚举的QMetaEnum
对象; - 使用
valueToKey
或keyToValue
进行转换操作。
2 枚举转字符串
接口:
1
const char *QMetaEnum::valueToKey(int value) const
输入:
value
为枚举值;- 输出: 枚举的字符串形式(没有找到枚举值返回空字符串)。
3 字符串转枚举
接口:
1
int QMetaEnum::keyToValue(const char *key, bool *ok = nullptr) const
输入:
key
为枚举字符串;- 输出: 返回值为枚举值,
ok
值为是否转换成功(需要做判断)。
4 注意事项
- 暂不推荐在cpp文件内创建继承于QObject的类或使用Q_OBJEC宏。
5 示例
Car.h
1
2
3
4
5
6
7
8
9
10
11
12
class Car : public QObject
{
Q_OBJECT
public:
Car(QObject *parent = 0) {}
~Car() {}
enum Color { RED, GREEN, BLUE };
Q_ENUM(Color)
};main.cpp
部分代码1
2
3
4
5
6QMetaEnum 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;