Qt里面定义了大量的枚举类型,有些类型的内部元素可以并列的。例如Qt::AlignmentFlag类型,包括
The horizontal flags are:
Qt::AlignLeft | 0x0001 | Aligns with the left edge. |
Qt::AlignRight | 0x0002 | Aligns with the right edge. |
Qt::AlignHCenter | 0x0004 | Centers horizontally in the available space. |
Qt::AlignJustify | 0x0008 | Justifies the text in the available space. |
The vertical flags are:
Constant | Value | Description |
---|---|---|
Qt::AlignTop | 0x0020 | Aligns with the top. |
Qt::AlignBottom | 0x0040 | Aligns with the bottom. |
Qt::AlignVCenter |
我们可以用Qt::AlignTop | Qt::AlignLeft 来表示左上角。假设一个函数接受位置作为参数,那么一般来说我们需要把这个函数的参数定义成int类型。这样就造成传递给函数的参数非法(132),但是函数却不能静态检查出来。把错误留给了运行阶段。
Qt定义了一个Flag的类,对于一个enum类型,通过声明 Q_DECLARE_FLAGS ( Flags, Enum ) 就会定义一个新的类型Flags。上面的函数就可以用Flags做参数了。
Q_DECLARE_FLAGS ( Flags, Enum ) 扩展成了 typedef QFlags<Enum> Flags;
例如:Qt::AlignmentFlag 就定义了Qt::Alignment作为它的Flags。在使用的时候我们直接定义
setAlignment(Qt::Alignment) 的函数就可以接受 Qt::AlignTop | Qt::AlignLeft 这样的参数了。其他的操作和参考Qt文档 qflags。