当前位置: 首页 > article >正文

Qt-Q_ENUM宏和QMetaEnum类

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

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类型的相关信息。

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。


http://www.kler.cn/a/597977.html

相关文章:

  • java江湖系列——集合世家争霸(下)
  • MySQL 5.7升级8.0报异常:处理新增关键字
  • 在 macOS 上安装 coc.nvim(推荐方式)
  • Java-01-源码篇-并发编程-资源竞争
  • 表达式树和编译原理【10道经典面试题】(中英对照)
  • 线段树与扫描线 —— 详解算法思想及其C++实现
  • python基于spark的心脏病患分类及可视化(源码+lw+部署文档+讲解),源码可白嫖!
  • N列股票收盘价为起点的马科维茨(Markowitz)均值—方差理论
  • 在小米AX6000中添加tailscale monitor
  • JavaScript-作用域、函数进阶、解构赋值、filter详解
  • Jboss
  • SSM社区生活超市管理
  • Powershell WSL Windows系统复制数据到ubuntu子系统系统
  • 嵌入式硬件篇---蓝牙模块
  • 群体智能优化算法-模拟退火优化算法(Simulated Annealing, SA,含Matlab源代码)
  • 【Keil5-开发技巧】
  • 华为昇腾AscendCL推理引擎入门
  • 【中文翻译】第8章-The Algorithmic Foundations of Differential Privacy
  • MCP(Model Context Protocol)好比大模型外挂!
  • 原生微信小程序基础语法--快速总结