QFlags类

template <typename Enum> class QFlags

QFlags类提供了一种自动安全的存储枚举值或组合的方式。 更多...

头文件 #include <QFlags>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core

公共类型

公共函数

QFlags()
QFlags(Enum flags)
QFlags(QFlag flag)
QFlags(std::initializer_list<Enum> flags)
QFlags(const QFlags<T> &other)
QFlags<T> &setFlag(Enum flag, bool on = true)
(since 6.2) booltestAnyFlag(Enum flag) const
(since 6.2) booltestAnyFlags(QFlags<T> flags) const
booltestFlag(Enum flag) const
(since 6.2) booltestFlags(QFlags<T> flags) const
(since 6.2) QFlags<T>::InttoInt() const
QFlags<T>::Intoperator QFlags<T>::Int() const
booloperator!() const
QFlags<T>operator&(int mask) const
QFlags<T>operator&(uint mask) const
(since 6.2) QFlags<T>operator&(QFlags<T> other) const
QFlags<T>operator&(Enum other) const
QFlags<T> &operator&=(int mask)
QFlags<T> &operator&=(uint mask)
(since 6.2) QFlags<T> &operator&=(QFlags<T> mask)
QFlags<T> &operator&=(Enum mask)
int &operator=(const QFlags<T> &)
QFlags<T>operator^(QFlags<T> other) const
QFlags<T>operator^(Enum other) const
QFlags<T> &operator^=(QFlags<T> other)
QFlags<T> &operator^=(Enum other)
QFlags<T>operator|(QFlags<T> other) const
QFlags<T>operator|(Enum other) const
QFlags<T> &operator|=(QFlags<T> other)
QFlags<T> &operator|=(Enum other)
QFlags<T>operator~() const

静态公有成员

(since 6.2) QFlags<T>fromInt(QFlags<T>::Int i)
(自6.2起) size_tqHash(QFlags<Enum> flags, size_t seed = 0)

宏定义

详细说明

QFlags<Enum>类是一个模板类,其中Enum是一个枚举类型。QFlags在Qt中被用于存储枚举值的组合。

存储枚举值的OR组合的传统C++方法是使用一个intuint变量。这种方法的不便之处在于没有任何类型检查;任何枚举值都可以与任何其他枚举值进行OR操作,并传递给接受intuint的函数。

Qt使用QFlags来提供类型安全性。例如,Qt::Alignment类型仅仅是QFlags<Qt::AlignmentFlag>的一个 typedef。 QLabel::setAlignment() 接受一个 Qt::Alignment 参数,这意味着任何Qt::AlignmentFlag值的组合,或 { },都是合法的

label->setAlignment(Qt::AlignLeft | Qt::AlignTop);
label->setAlignment({ });

如果你尝试传递来自另一个枚举或除了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)
    ...
};

Q_DECLARE_OPERATORS_FOR_FLAGS(MyClass::Options)

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

标志和元对象系统

Q_DECLARE_FLAGS()宏不会将标志暴露给元对象系统,因此它们不能由Qt脚本或Qt设计师编辑。为了使标志可用于这些目的,必须使用Q_FLAG()宏。

Q_FLAG(Options)

命名约定

对于枚举类型及其相关QFlags类型,一个合理的命名约定是为枚举类型提供一个单数名称(例如,Option),并为QFlags类型提供一个复数名称(例如,Options)。当QFlags类型需要单数名称时(例如,Alignment),可以使用Flag作为枚举类型的后缀(例如,AlignmentFlag)。

另请参阅 QFlag.

成员类型文档

QFlags::Int

用于存储以及隐式转换的整型类型的typedef。可以是intunsigned int,具体取决于枚举的底层类型是有符号还是无符号。

QFlags::enum_type

枚举模板类型的typedef。

成员函数文档

[constexpr noexcept] QFlags::QFlags()

构造一个不带标志设置的QFlags对象。

[constexpr noexcept] QFlags::QFlags(Enum flags)

构造一个存储 flags 的 QFlags 对象。

[constexpr noexcept] QFlags::QFlags(QFlag flag)

使用整数 flag 初始化一个 QFlags 对象。

QFlag 类型是一个辅助类型。在这里使用 QFlag 而不是 int,我们可以有效地确保任意枚举值不能被转换为 QFlags,而未类型化的枚举值(即 int 值)可以。

[constexpr noexcept] QFlags::QFlags(std::initializer_list<Enum> flags)

使用按位或运算符合并所有 flags 以初始化 QFlags 对象。

另请参阅operator|=() 和 operator|

[default] QFlags::QFlags(const QFlags<T> &other)

构造一个 other 的副本。

[static constexpr noexcept, since 6.2] QFlags<T> QFlags::fromInt(QFlags<T>::Int i)

构造一个表示整数值 iQFlags 对象。

此函数自 Qt 6.2 版本开始引入。

[constexpr noexcept, since 6.2] QFlags<T> &QFlags::setFlag(Enum flag, bool on = true)

如果 ontrue 则设置标志 flag;如果 onfalse 则取消设置。返回此对象的引用。

[constexpr noexcept, since 6.2] bool QFlags::testAnyFlag(Enum flag) const

如果 flag 中设置了任何标志,则返回 true;否则返回 false。如果 flag 没有设置任何标志,总是返回 false

此函数自 Qt 6.2 版本开始引入。

另请参阅testFlag

[constexpr noexcept, since 6.2] bool QFlags::testAnyFlags(QFlags<T> flags) const

如果 flags 中设置了任何标志,则返回 true;否则返回 false。如果 flags 没有设置任何标志,总是返回 false

此函数自 Qt 6.2 版本开始引入。

另请参阅testFlags

[constexpr noexcept] bool QFlags::testFlag(Enum flag) const

如果标志 flag 已设置,则返回 true,否则返回 false

注意: 如果 标志 包含多个设置为1的位(例如,它是一个等于其他枚举位或的枚举器),则该函数仅在所有位在此标志对象中都设置为1时返回 true。另一方面,如果 标志 没有设置为1的位(即其作为整数的值为0),则该函数仅在也在此标志对象中没有位设置为1时返回 true

另请参阅 testAnyFlag().

[constexpr noexcept, since 6.2] bool QFlags::testFlags(QFlags<T> 标志) const

如果此标志对象与给定的 标志 匹配,则返回 true

如果 标志 设置了任何标志,则当 标志 中设置的标志也在此标志对象中设置时,该标志对象将精确匹配。否则,当 标志 没有设置任何标志时,只有当它也没有设置任何标志时,该标志对象才匹配。

此函数自 Qt 6.2 版本开始引入。

另请参阅 testAnyFlags().

[constexpr noexcept, since 6.2] QFlags<T>::Int QFlags::toInt() const

返回存储在 QFlags 对象中的整数值。注意,返回的整数可能是有符号的或无符号的,具体取决于枚举的底层类型是有符号的还是无符号的。

此函数自 Qt 6.2 版本开始引入。

另请参阅 Int.

[constexpr noexcept] QFlags<T>::Int QFlags::operator QFlags<T>::Int() const

返回存储在 QFlags 对象中的整数值。

另请参阅 Int.

[constexpr noexcept] bool QFlags::operator!() const

如果没有设置标志(即 QFlags 对象存储的值为0),则返回 true;否则返回 false

[constexpr noexcept] QFlags<T> QFlags::operator&(int 掩码) const

返回一个包含对此对象和 掩码 进行位与操作结果的 QFlags 对象。

另请参阅 operator&=operator|operator^operator~

[constexpr noexcept] QFlags<T> QFlags::operator&(uint 掩码) const

这是一个重载函数。

[constexpr noexcept, since 6.2] QFlags<T> QFlags::operator&(QFlags<T> 其他) const

这是一个重载函数。

此函数自 Qt 6.2 版本开始引入。

constexpr [noexcept] [constexpr noexcept] QFlags<T> QFlags::operator&(Enum other) const

这是一个重载函数。

constexpr [noexcept] [constexpr noexcept] QFlags<T> &QFlags::operator&=(int mask)

使用 mask 和此 QFlags 对象进行位与操作并将结果存储在此对象中。返回对此对象的引用。

另请参阅operator& (), operator| () 和 operator^= ()。

constexpr [noexcept] [constexpr noexcept] QFlags<T> &QFlags::operator&=(uint mask)

这是一个重载函数。

constexpr [noexcept, since 6.2] [constexpr noexcept, since 6.2] QFlags<T> &QFlags::operator&=(QFlags<T> mask)

这是一个重载函数。

此函数自 Qt 6.2 版本开始引入。

constexpr [noexcept] [constexpr noexcept] QFlags<T> &QFlags::operator&=(Enum mask)

这是一个重载函数。

[default] int &QFlags::operator=(const QFlags<T> &)

other 分配给此对象并返回对此对象的引用。

constexpr [noexcept] [constexpr noexcept] QFlags<T> QFlags::operator^(QFlags<T> other) const

返回一个包含在此对象和 other 上进行位异或操作的结果的 QFlags 对象。

另请参阅operator^= (), operator& (), operator| () 和 operator~ ()。

constexpr [noexcept] [constexpr noexcept] QFlags<T> QFlags::operator^(Enum other) const

这是一个重载函数。

constexpr [noexcept] [constexpr noexcept] QFlags<T> QFlags::operator^(QFlags<T> other)

other 与此 QFlags 对象进行位异或操作并将结果存储在此对象中。返回对此对象的引用。

另请参阅operator^ (), operator&= () 和 operator|= ()。

constexpr [noexcept] [constexpr noexcept] QFlags<T> &QFlags::operator^=(Enum other)

这是一个重载函数。

[constexpr nonstd::throw_nothrow] QFlags<T> QFlags::operator|(QFlags<T> other) const

返回一个包含对此对象和 other 执行位或运算结果的 QFlags 对象。

另请参阅operator|=(),operator^(),operator&() 和 operator~()。

[constexpr nonstd::throw_nothrow] QFlags<T> QFlags::operator|(Enum other) const

这是一个重载函数。

[constexpr nonstd::throw_nothrow] QFlags<T> &QFlags::operator|=(QFlags<T> other)

other 与此执行位或运算,并将结果存储在此 QFlags 对象中。返回对此对象的引用。

另请参阅operator|(),operator&=() 和 operator^=()。

[constexpr nonstd::throw_nothrow] QFlags<T> &QFlags::operator|=(Enum other)

这是一个重载函数。

[constexpr nonstd::throw_nothrow] QFlags<T> QFlags::operator~() const

返回包含此对象的位取反结果的 QFlags 对象。

另请参阅operator&(),operator|() 和 operator^()。

相关非成员函数

[constexpr nonstd::throw_nothrow,自6.2版本起] template <typename Enum> size_t qHash(QFlags<Enum> flags, size_t seed = 0)

使用 seed 来初始化计算,计算标志的哈希值。

此函数自 Qt 6.2 版本开始引入。

宏文档

Q_DECLARE_FLAGS(Flags, Enum)

Q_DECLARE_FLAGS() 宏展开为

typedef QFlags<Enum> Flags;

Enum 是一个存在的枚举类型的名称,而 FlagsQFlags<Enum> 类型定义的名称。

有关详细信息,请参阅 QFlags 文档。

另请参阅Q_DECLARE_OPERATORS_FOR_FLAGS()。

Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)

Q_DECLARE_OPERATORS_FOR_FLAGS() 宏声明了类型为 QFlags<T> 的 Flags 的全局 operator|() 函数。

有关详细信息,请参阅 QFlags 文档。

另请参阅Q_DECLARE_FLAGS()。

© 2024 Qt 公司 Ltd。本文档中包含的贡献是各自所有者的版权。提供的文档根据自由软件基金会发布的GNU自由文档许可证版本1.3 的条款进行许可。Qt及其标志是在芬兰和/或世界其他地区的The Qt Company Ltd.的商标。所有其他商标均为各自所有者的财产。