Qt 枚举变量的高阶技巧 - 枚举值和字符串之间的相互转换 - Q_ENUM,Q_FLAG,Q_NAMESPACE,Q_ENUM_NS,Q_FLAG_NS

本文介绍了Qt中枚举变量的高级技巧,包括Q_ENUM和Q_FLAG宏的作用,以及如何手动实现枚举值与字符串的转换。详细讲解了Q_ENUM的使用场景和注意事项,Q_FLAG解决的多枚举值组合问题,以及Qt自带的Q_NAMESPACE, Q_ENUM_NS和Q_FLAG_NS在命名空间中的应用。最后总结了Qt枚举扩展的演变和发展。" 110738870,10296037,OpenCV Python: 将白色像素转为黑色像素的图像处理,"['图像处理', 'OpenCV', 'Python编程']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、引用 枚举值宏 所解决的问题:

1、Q_ENUM

2、Q_FLAG

二、手写枚举值和字符串之间的相互转化

1.使用 switch-case 进行装换

2.使用数组

三、QT 自带宏命令

1、Q_ENUM 的使用

Q_ENUM 使用的几个注意事项:

2、Q_FLAG 的使用

先看一下其发展路径:

第一个问题:

第二个问题:

看一下完整示例

3、Q_NAMESPACE, Q_ENUM_NS 和 Q_FLAG_NS 命名空间

四、总结:


一、引用 枚举值宏 所解决的问题:

1、Q_ENUM

能够轻松完成枚举量字符串之间的相互转化。

枚举参数显示的是 int 类型,如:3。3 这个信息对于我们 调试或打印日志 很不友好。

在方法内,我们并不知道这个 3 代表的是什么。为了解决这个问题,有了个很有用的特性:Q_ENUM

2、Q_FLAG

弥补 C++ 中结构体 无法组合使用,和 缺乏类型检查 的缺点,可以 拥有多个身份,如:

enum Roles
{
    Admin = 1,
    Member = 2
}

上述定义了两个身份:Admin 和 Member,如果一个用户想拥有两个身份应该怎么做?

Q_FLAG 就是为了解决这个问题而创造出来的。

 

二、手写枚举值字符串之间的相互转化

typedef enum 
{
	SUNDAY,
	MONDAY,
	TUESDAY,
	WEDNESDAY,
	THURSDAY,
	FRIDAY,
	SATURDAY
} WeekEnum;

1.使用 switch-case 进行装换

char * StringDirectionT(WeekEnum mWeek)
{
        switch(mWeek)
        {
                case SUNDAY : return "SUNDAY";
                case MONDAY  : return "MONDAY";
                case TUESDAY : return "TUESDAY";
                case WEDNESDAY  : return "WEDNESDAY";
                case THURSDAY  : return "THURSDAY";
                case FRIDAY  : return "FRIDAY";
                case SATURDAY  : return "SATURDAY";
                default    : printf("Illegal direction value!\n;
        }
}

输出:

printf("The Week is %s \n",StringDirectionT(m_Week));

2.使用数组

char *a_Week[] = { "SUNDAY", "MONDAY", "TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","FRIDAY","SATURDAY"}; 

输出:

然后直接根据vl_Week的值去对应的数组元素

3.使用宏定义

#define enumToStr(WEEEK)  "\""#WEEK"\""

输出:

printf("The Week is %s",enumToStr(vl_Week));

 

三、QT 自带宏命令

Qt 使用一组宏命令来完成枚举量扩展功能的(正如Qt的其他核心机制一样),这些宏包括

Q_ENUM, Q_FLAG, Q_DECLARE_FLAGS,Q_DECLARE_OPERATORS_FOR_FLAGS,

Q_ENUM_NS, Q_FLAG_NS,

这些宏的实现原理和如何展开如何注册到 Qt 内核均不在本文的讲解范围,本文只讲应用。

1、Q_ENUM 的使用

首先讲解最简单明了的宏 Q_ENUM,先看代码:

#include <QObject>

class MyEnum : public QObject
{
    Q_OBJECT
public:
    explicit MyEnum(QObject *parent = nullptr);
    
    enum Priority
    {
        High = 1,
        Low = 2,
        VeryHigh =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值