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。

相关推荐
枫叶丹42 分钟前
【HarmonyOS 6.0】MDM Kit 深度解析:企业级 user_grant 权限集中管理策略
开发语言·华为·harmonyos
鱼子星_2 分钟前
C++从零开始系列篇(一):C++入门——命名空间,输入输出与缺省参数
开发语言·c++
就叫_这个吧9 分钟前
Java使用tomcat+servlet+filter实现简单的登录功能,需先登录再进行页面数据管理操作
java·开发语言·servlet·tomcat·jsp·filter
dtq042412 分钟前
C语言刷题函数2 - 用函数实现数组操作
c语言·开发语言
川石课堂软件测试18 分钟前
UI自动化测试|下拉选择框&弹出框&滚动条操作实践
开发语言·python·jmeter·ui·docker·单元测试·harmonyos
十五年专注C++开发20 分钟前
ANTLR4: CORBA IDL、C++ 语法文件分析利器
java·开发语言·c++·antlr4
Mortalbreeze28 分钟前
C++11 ---- 引用折叠、完美转发、可变模板参数、emplace系列接口
开发语言·c++
星恒随风28 分钟前
C++ 内存管理详解:从内存分区、malloc/free 到 new/delete
开发语言·c++·笔记·学习
object not found29 分钟前
Node.js fs 常用 API 整理:node:fs/promises、node:fs、fs 到底怎么用
开发语言·前端·javascript