QFlag
详细描述
它相当于一个普通的int
,但在函数重载和类型转换方面有所不同。在应用程序中永远不应需要使用此类。
成员函数
QFlag::QFlag(int value)
构建一个存储给定值的QFlag对象。
QFlag::QFlag(uint value)
构建一个QFlag对象,该对象存储给定的值。
此函数在 Qt 5.3 中引入。
QFlag::QFlag(short value)
构建一个存储给定值的QFlag对象。
此函数在 Qt 5.3 中引入。
QFlag::QFlag(ushort value)
构建一个QFlag对象,该对象存储给定的值。
此函数在 Qt 5.3 中引入。
QFlag::operator int()
返回由QFlag对象存储的值。
QFlag::operator uint()
返回由QFlag对象存储的值。
此函数在 Qt 5.3 中引入。
QFlags
详细描述
QFlags 类提供了一种类型安全的方式来存储枚举值的或组合。
QFlags<Enum>类是一个模板类,其中枚举是一个枚举类型。QFlags在整个 Qt 中用于存储枚举值的组合。
传统的 C++ 用于存储枚举值的“或”组合的方法是使用int
或uint
变量。这种方法的不便之处在于根本没有类型检查;任何枚举值都可以与任何其他枚举值进行“或”运算,并传递给接受int
或uint
的函数。
Qt 使用QFlags来提供类型安全性。例如,Qt::Alignment类型仅仅是QFlags<Qt::AlignmentFlag>的类型定义。QLabel::setAlignment()接受一个Qt::Alignment参数,这意味着Qt::AlignmentFlag值的任何组合或 0 都是合法的:
label->setAlignment(Qt::AlignLeft | Qt::AlignTop);
如果试图传递来自另一个枚举的值或者一个非 0 的普通整数,编译器将会报告错误。如果需要以无类型的方式将整数值转换为标志,可以使用显式的 QFlags 构造函数作为转换运算符。
如果想要将 QFlags 用于自身的枚举类型,那么请使用 Q_DECLARE_FLAGS() 以及 Q_DECLARE_OPERATORS_FOR_FLAGS() 。
示例:
class MyClass
{
public:
enum Option {
NoOptions = 0x0,
ShowTabs = 0x1,
ShowAll = 0x2,
SqueezeBlank = 0x4
};
Q_DECLARE_FLAGS(Options, Option)
...
};
然后,就可以使用MyClass::Options
类型来存储MyClass::Option
值的组合。
- Flags 与元对象系统
Q_DECLARE_FLAGS() 宏不会将标志向元对象系统公开,所以它们无法被 Qt 脚本使用或者在 Qt 设计器中进行编辑。为了让这些标志能用于上述目的,必须使用 Q_FLAG() 宏。
Q_FLAG(Options)
- 命名约定
对于枚举类型和相关的 QFlags 类型,一种合理的命名约定是:给枚举类型一个单数名称(例如,Option),给 QFlags 类型一个复数名称(例如,Options)。当希望 QFlags 类型为单数名称时(例如,Alignment),可以将 Flag 用作枚举类型的后缀(例如,AlignmentFlag)。
参考QFlag
成员类型
typedef QFlags::Int
这是关于整数类型的定义说明,用于存储以及隐式转换。其类型可能是 int 或者 unsigned int,具体取决于枚举的底层类型是有符号还是无符号。
此定义类型是在 Qt 5.0 中引入的。
typedef QFlags::enum_type
枚举(Enum)模板类型的类型定义
成员函数
QFlags::QFlags(const QFlags &other)
构建一个其他对象的副本
QFlags::QFlags(Enum flag)
构建一个存储给定标志的QFlags对象。
QFlags::QFlags(Zero zero = Q_NULLPTR)
构建一个没有设置任何标志的QFlags对象。 zero必须是字面值 0 值。
QFlags::QFlags(QFlag value)
构建一个QFlags对象,使用给定的整数值进行初始化。
QFlag 类型是一种辅助类型。在此处使用它而非 int 类型,能够有效地确保任意的枚举值无法转换为 QFlags ,然而未类型化的枚举值(即 int 值)则可以。
QFlags::QFlags(std::initializer_list<Enum> flags)
构建一个QFlags对象,使用按位或运算符将所有标志组合进行初始化。
此函数在 Qt 5.4 中引入。
另请参阅operator|=() 与operator|().
bool QFlags::testFlag(Enum flag) const
如果标志已设置,则返回true,否则返回false。
此函数在 Qt 4.2 中引入。
QFlags::operator Int() const
返回存储在QFlags对象中的值作为整数。
另请参阅 Int。
bool QFlags::operator!() const
如果没有设置任何标志(即 QFlags 对象存储的值为 0),则返回真;否则返回假。
QFlags QFlags::operator&(int mask) const
返回一个 QFlags 对象,该对象包含了对当前对象和mask执行按位与运算的结果。
另请参阅 operator&=(), operator|(), operator^(), 与 operator~().
QFlags QFlags::operator&(uint mask) const
这是一个重载函数
QFlags QFlags::operator&(Enum mask) const
这是一个重载函数
QFlags &QFlags::operator&=(int mask)
对 mask执行按位与运算,并将结果存储在这个 QFlags 对象中。返回对此对象的引用。
另请参阅 operator&(), operator|=(), 与 operator^=().
QFlags &QFlags::operator&=(uint mask)
这是一个重载函数
QFlags &QFlags::operator&=(Enum mask)
这是一个重载函数
QFlags &QFlags::operator=(const QFlags &other)
将other分配给此对象,并返回对此对象的引用。
QFlags QFlags::operator^(QFlags other) const
返回一个QFlags对象,其中包含此对象与其他进行按位异或运算的结果。
另请参阅 operator^=(), operator&(), operator|(), 与operator~().
QFlags QFlags::operator^(Enum other) const
这是一个重载函数
QFlags &QFlags::operator^=(QFlags other)
这是一个重载函数
QFlags QFlags::operator|(Enum other) const
这是一个重载函数
QFlags &QFlags::operator|=(QFlags other)
对 other执行按位或运算,并将结果存储在这个 QFlags 对象中。返回对此对象的引用。
另请参阅 operator|(), operator&=(), 与operator^=().
QFlags &QFlags::operator|=(Enum other)
这是一个重载函数
QFlags QFlags::operator~() const
这是一个重载函数
宏
Q_DECLARE_FLAGS(Flags, Enum)
Q_DECLARE_FLAGS() 宏扩展为
typedef QFlags<Enum> Flags;
Enum是现有枚举类型的名称,而标志Flags是QFlags<Enum>类型定义的名称。
查看QFlags文档以获取详细信息。
另请参阅 Q_DECLARE_OPERATORS_FOR_FLAGS() 。
Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)
Q_DECLARE_OPERATORS_FOR_FLAGS() 宏为 Flags 声明全局operator|()
函数,其类型为QFlags。
查看QFlags文档以获取详细信息。
另请参阅 Q_DECLARE_FLAGS() 。