枚举
类中定义枚举
class MyEnum : public QObject { Q_OBJECT public: MyEnum(QObject *parent); ~MyEnum(); enum Priority { High = 1, Low = 2, VeryHigh = 3, VeryLow = 4 }; Q_ENUM(Priority) //如果不加这个宏语句,那么直接打印的就是值了 };
可以直接打印出枚举类值的字符串名称
qDebug() << MyEnum::High << MyEnum::Low; //qDebug()可以直接打印出枚举类值的字符串名称
转换
//需要添加头文件 #include"QMetaEnum",要不然会报错 QMetaEnum m = QMetaEnum::fromType<MyEnum::Priority>(); //since Qt5.5 //字符串转枚举 qDebug() << "keyToValue:" << m.keyToValue("VeryHigh"); //枚举转整形 qDebug() << "valueToKey:" << m.valueToKey(MyEnum::VeryHigh); //获取枚举数量 qDebug() << "keyCount:" << m.keyCount(); //结果 /* MyEnum::High MyEnum::Low keyToValue : 3 valueToKey : VeryHigh keyCount : 4*/ //name()函数返回枚举类型名字 qDebug() << m.name() << ":";//结果是:VeryHigh for (size_t i = 0; i < m.keyCount(); i++) { qDebug() << m.key(i) << m.value(i); } /* 结果 High 1 Low 2 VeryHigh 3 VeryLow 4*/
//int转枚举
//int转枚举 int IntValue = 1; MyEnum::Priority enumEnity = static_cast<MyEnum::Priority>(IntValue);
命名空间定义枚举
#pragma once #include <QObject> class MyEnum : public QObject { Q_OBJECT public: MyEnum(QObject *parent); ~MyEnum(); enum Priority { High = 1, Low = 2, VeryHigh = 3, VeryLow = 4 }; Q_ENUM(Priority) //如果不加这个宏语句,那么直接打印的就是值了 };
使用
// 获取枚举的元信息 QMetaEnum metaEnum = QMetaEnum::fromType<MyNamespace123::Priority123>(); // 枚举值转字符串 qDebug() << metaEnum.valueToKey(static_cast<int>(MyNamespace123::Priority123::High)); // 输出 "High" // 字符串转枚举值 int enumValue = metaEnum.keyToValue("Low"); // 得到整数值 2 MyNamespace123::Priority123 priority = static_cast<MyNamespace123::Priority123>(enumValue);

浙公网安备 33010602011771号