Q_FLAG与Q_ENUM

文章目录

    • 目的
    • Q_FLAG
    • 命名惯例
    • Q_DECLARE_FLAGS(enums, enum)
    • Q_DECLARE_OPERATORS_FOR_FLAGS(enums)
    • Q_ENUM
    • Q_ENUM_NS
    • Q_DECLARE_METATYPE
    • Q_DECLARE_OPAQUE_POINTER

目的

主要是掌握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ÿ

你可能感兴趣的:(Qt,qt)