Qt-Q_ENUM宏和QMetaEnum类

Q_ENUM是一个宏定义,它的作用是将一个枚举类型注册到元对象系统,从而能够通过QMetaEnum类获得一些关于enum类型的一些信息,例如获取enum类型的名称字符串,enum值和字符串互相转换,enum类型保存在QVariant中,enum值的个数,qDebug()打印enum值名称等等。

用法:在一个继承于QObject的子类中声明enum,然后在定义后面使用Q_ENUM宏注册enum类型。如下:

cpp 复制代码
class MyClass : public QObject
{
    Q_OBJECT

public:
    MyClass(QObject *parent = nullptr);
    ~MyClass();

    enum Priority { High, Low, VeryHigh, VeryLow };
    Q_ENUM(Priority)
    void setPriority(Priority priority);
    Priority priority() const;
};

随后通过QMetaEnum获取enum类型的相关信息。

cpp 复制代码
QMetaEnum metaEnum = QMetaEnum::fromType<MyClass ::Priority >();
qDebug() << metaEnum.enumName();  // Priority
qDebug() << metaEnum.keyCount();  // 4
QString s = metaEnum.valueToKey(MyClass::Priority::Low;  // Low
int p = metaEnum.keyToValue(s);  // 1
MyClass::Priority e = (MyClass::Priority)p;
qDebug() << e; // 打印MyClass::Low而不是1
QVariant v = QVariant::fromValue(e);  // 保存在QVariant中

使用Q_ENUM声明的枚举类型已经在元对象系统中注册,不再需要使用Q_DELCARE_METATYPE。

相关推荐
PieroPc2 小时前
用python Streamlit 做个RapidOCR 文本识别系统
开发语言·python·ocr
暖木生晖2 小时前
Javascript函数之匿名函数以及立即执行函数的使用方法?
开发语言·javascript·ecmascript
CodeKwang2 小时前
Qt实战:自定义搜索跳转控件 | 附完整源码
qt·qt控件
say_fall2 小时前
C语言容易被忽略的易错点(2)
c语言·开发语言
syker3 小时前
NEWBASIC 2.06.7 API 帮助与用户使用手册
开发语言·人工智能·机器学习·自动化
Js_cold3 小时前
Verilog运算符
开发语言·fpga开发·verilog
努力还债的学术吗喽3 小时前
【项目】pyqt5基于python的照片整蛊项目
开发语言·python·qt
weixin_459548903 小时前
Qt对话框设计
qt
m0_569531013 小时前
shell(4)--shell脚本中的循环:(if循环,for,while,until)和退出循环(continue,break, exit)
开发语言
星释3 小时前
Rust 练习册 :掌握文本处理与词频统计
开发语言·后端·rust