Q_FLAG与Q_ENUM

本文详细介绍了Qt库中的Q_FLAG和Q_ENUM宏的用途和影响。Q_FLAG用于创建安全存储枚举值组合的QFlags类,Q_ENUM则用于向元对象系统注册枚举类型,使得枚举能在Qt脚本和设计编辑器中使用。同时,文章讨论了相关的命名惯例、Q_DECLARE_FLAGS和Q_DECLARE_OPERATORS_FOR_FLAGS宏的作用,以及Q_ENUM_NS、Q_DECLARE_METATYPE和Q_DECLARE_OPAQUE_POINTER在不同场景下的应用。
摘要由CSDN通过智能技术生成

目的

主要是掌握Qt 中Q_FLAG, Q_ENUM这两处宏定义作用与影响.

QFlags

QFlags类提供存储或组合枚举值的类型安全的方法。
QFlags 类是一个模板类,其中enum是枚举类型。在整个Qt中使用QFlags来存储枚举值的组合。
用于存储枚举值的OR组合的传统C ++方法是使用int或uint变量。这种方法的不便之处在于根本没有类型检查; 任何枚举值都可以与任何其他枚举值进行“ int或” ,并传递给带有或的函数uint。

Qt使用QFlags提供类型安全。

  label - > setAlignment(Qt :: AlignLeft |  Qt :: AlignTop);
  这意味着Qt :: AlignmentFlag值或0的任何组合都是合法的:
  如果您尝试从另一个枚举中传递值或仅传递0以外的普通整数,编译器将报告错误。
  如果需要以无类型方式将整数值强制转换为标志,则可以使用显式QFlags构造函数作为强制转换运算符。

如果要将QFlags用于自己的枚举类型,请使用Q_DECLARE_FLAGS()和Q_DECLARE_OPERATORS_FOR_FLAGS()。

class MyClass
  {
   
  public:
       Option{
   
          NoOptions =  0x0 , 
          ShowTabs =  0x1 , 
          ShowAll =  0x2 , 
          SqueezeBlank =  0x4
      };
      Q_DECLARE_FLAGS(Options,Option)
      ...
  };
  Q_DECLARE_OPERATORS_FOR_FLAGS(MyClass::Options)

然后,可以使用该MyClass::Options类型来存储MyClass::Option值的组合。

QFlags_tutorial

Q_FLAG

Q_DECLARE_FLAGS()宏不公开标志来元对象系统,所以它们不能被Q

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道阻且长,行则降至

无聊,打赏求刺激而已

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值