QFlags 类

template <typename Enum> class QFlags

QFlags 类提供存储枚举值 OR 组合的类型安全方式。 更多...

头: #include <QFlags>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

公共类型

Int
enum_type

公共函数

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)
(从 6.2 起) bool testAnyFlag (Enum flag ) const
(从 6.2 起) bool testAnyFlags (QFlags<T> flags ) const
bool testFlag (Enum flag ) const
(从 6.2 起) bool testFlags (QFlags<T> flags ) const
(从 6.2 起) QFlags<T>::Int toInt () const
QFlags<T>::Int operator QFlags<T>::Int () const
bool operator! () const
QFlags<T> operator& (int mask ) const
QFlags<T> operator& (uint mask ) const
(从 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 )
(从 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

静态公共成员

(从 6.2 起) QFlags<T> fromInt (QFlags<T>::Int i )
(从 6.2 起) size_t qHash (QFlags<Enum> flags , size_t seed = 0)

Q_DECLARE_FLAGS ( Flags , Enum )
Q_DECLARE_OPERATORS_FOR_FLAGS ( Flags )

详细描述

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

传统 C++ 存储枚举值 OR 组合的方式是使用 int or uint variable. The inconvenience with this approach is that there's no type checking at all; any enum value can be OR'd with any other enum value and passed on to a function that takes an int or uint .

Qt 使用 QFlags 提供类型安全性。例如, Qt::Alignment type is simply a typedef for QFlags< Qt::AlignmentFlag >. QLabel::setAlignment () takes a Qt::Alignment parameter, which means that any combination of Qt::AlignmentFlag values, or { } , is legal:

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

If you try to pass a value from another enum or just a plain integer other than 0, the compiler will report an error. If you need to cast integer values to flags in a untyped fashion, you can use the explicit QFlags constructor as cast operator.

If you want to use QFlags for your own enum types, use the 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)
					

You can then use the MyClass::Options type to store combinations of MyClass::Option 值。

标志和元对象系统

The Q_DECLARE_FLAGS () macro does not expose the flags to the meta-object system, so they cannot be used by Qt Script or edited in Qt Designer. To make the flags available for these purposes, the Q_FLAG () macro must be used:

Q_FLAG(Options)
					

命名约定

A sensible naming convention for enum types and associated QFlags types is to give a singular name to the enum type (e.g., 选项 ) and a plural name to the QFlags type (e.g., 选项 ). When a singular name is desired for the QFlags type (e.g., Alignment ), you can use Flag as the suffix for the enum type (e.g., AlignmentFlag ).

另请参阅 QFlag .

成员类型文档编制

QFlags:: Int

Typedef for the integer type used for storage as well as for implicit conversion. Either int or 无符号 int , depending on whether the enum's underlying type is signed or unsigned.

QFlags:: enum_type

用于枚举模板类型的 Typedef。

成员函数文档编制

[constexpr noexcept] QFlags:: QFlags ()

构造没有设置标志的 QFlags 对象。

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

构造 QFlags 对象存储 flags .

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

构造 QFlags 对象初始化采用整数 flag .

The QFlag type is a helper type. By using it here instead of int , we effectively ensure that arbitrary enum values cannot be cast to a QFlags, whereas untyped enum values (i.e., int values) can.

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

构造 QFlags 对象初始化采用所有 flags combined using the bitwise OR operator.

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

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

构造副本为 other .

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

构造 QFlags object representing the integer value i .

该函数在 Qt 6.2 引入。

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

Sets the flag flag if on is true or unsets it if on is false 。返回此对象的引用。

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

返回 true if any flag set in flag is also set in this flags object, otherwise false 。若 flag has no flags set, the return will always be false .

该函数在 Qt 6.2 引入。

另请参阅 testFlag ().

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

返回 true if any flag set in flags is also set in this flags object, otherwise false 。若 flags has no flags set, the return will always be false .

该函数在 Qt 6.2 引入。

另请参阅 testFlags ().

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

返回 true 若标志 flag 被设置,否则 false .

注意: if flag contains multiple bits set to 1 (for instance, if it's an enumerator equal to the bitwise-OR of other enumerators) then this function will return true if and only if all the bits are set in this flags object. On the other hand, if flag contains no bits set to 1 (that is, its value as a integer is 0), then this function will return true if and only if this flags object also has no bits set to 1.

另请参阅 testAnyFlag ().

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

返回 true if this flags object matches the given flags .

flags has any flags set, this flags object matches precisely if all flags set in flags are also set in this flags object. Otherwise, when flags has no flags set, this flags object only matches if it also has no flags set.

该函数在 Qt 6.2 引入。

另请参阅 testAnyFlags ().

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

返回值存储在 QFlags object as an integer. Note that the returned integer may be signed or unsigned, depending on whether the enum's underlying type is signed or unsigned.

该函数在 Qt 6.2 引入。

另请参阅 Int .

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

返回值存储在 QFlags 对象作为整数。

另请参阅 Int .

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

返回 true if no flag is set (i.e., if the value stored by the QFlags object is 0); otherwise returns false .

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

返回 QFlags object containing the result of the bitwise AND operation on this object and mask .

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

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

这是重载函数。

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

这是重载函数。

该函数在 Qt 6.2 引入。

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

这是重载函数。

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

Performs a bitwise AND operation with mask and stores the result in this QFlags object. Returns a reference to this object.

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

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

这是重载函数。

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

这是重载函数。

该函数在 Qt 6.2 引入。

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

这是重载函数。

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

赋值 other 到此对象并返回此对象的引用。

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

返回 QFlags object containing the result of the bitwise XOR operation on this object and other .

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

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

这是重载函数。

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

Performs a bitwise XOR operation with other and stores the result in this QFlags object. Returns a reference to this object.

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

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

这是重载函数。

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

返回 QFlags object containing the result of the bitwise OR operation on this object and other .

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

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

这是重载函数。

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

Performs a bitwise OR operation with other and stores the result in this QFlags object. Returns a reference to this object.

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

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

这是重载函数。

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

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

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

相关非成员

[constexpr noexcept, since 6.2] template <typename Enum> size_t qHash ( QFlags < Enum > flags , size_t seed = 0)

Calculates the hash for the flags flags ,使用 seed 做计算种子。

该函数在 Qt 6.2 引入。

宏文档编制

Q_DECLARE_FLAGS ( Flags , Enum )

The Q_DECLARE_FLAGS() macro expands to

typedef QFlags<Enum> Flags;
					

Enum is the name of an existing enum type, whereas Flags is the name of the QFlags < Enum > typedef.

QFlags 文档编制了解细节。

另请参阅 Q_DECLARE_OPERATORS_FOR_FLAGS ().

Q_DECLARE_OPERATORS_FOR_FLAGS ( Flags )

Q_DECLARE_OPERATORS_FOR_FLAGS() 宏声明全局 operator|() 函数为 Flags , which is of type QFlags <T>.

QFlags 文档编制了解细节。

另请参阅 Q_DECLARE_FLAGS ().