枚举

类中定义枚举

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);

 

posted @ 2025-11-19 18:34  家煜宝宝  阅读(5)  评论(0)    收藏  举报