QFlags 類

template <typename Enum> class QFlags

QFlags 類提供存儲枚舉值 OR 組閤的類型安全方式。 更多...

頭: #include <QFlags>
qmake: QT += core

公共類型

typedef Int
typedef enum_type

公共函數

QFlags (std::initializer_list<Enum> flags )
QFlags (QFlag flag )
QFlags (Enum flags )
QFlags ()
QFlags (const QFlags<T> & other )
QFlags<T> & operator= (const QFlags<T> & other )
QFlags<T> & setFlag (Enum flag , bool on = true)
bool testFlag (Enum flag ) const
QFlags::Int operator QFlags::Int () const
bool operator! () const
QFlags<T> operator& (int mask ) const
QFlags<T> operator& (uint mask ) const
QFlags<T> operator& (Enum other ) const
QFlags<T> & operator&= (int mask )
QFlags<T> & operator&= (uint mask )
QFlags<T> & operator&= (Enum mask )
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

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 .

成員類型文檔編製

typedef 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.

該 typedef 在 Qt 5.0 引入。

typedef QFlags:: enum_type

用於枚舉模闆類型的 Typedef。

成員函數文檔編製

QFlags:: QFlags ( std::initializer_list < Enum > flags )

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

該函數在 Qt 5.4 引入。

另請參閱 operator|= () 和 operator| ().

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.

QFlags:: QFlags ( Enum flags )

構造 QFlags 對象存儲 flags .

QFlags:: QFlags ()

構造沒有設置標誌的 QFlags 對象。

該函數在 Qt 5.15 引入。

QFlags:: QFlags (const QFlags < T > & other )

構造副本為 other .

QFlags < T > &QFlags:: operator= (const QFlags < T > & other )

賦值 other 到此對象並返迴此對象的引用。

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

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

該函數在 Qt 5.7 引入。

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.

該函數在 Qt 4.2 引入。

QFlags::Int QFlags:: operator QFlags::Int () const

返迴值存儲在 QFlags 對象作為整數。

另請參閱 Int .

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 .

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~ ().

QFlags < T > QFlags:: operator& ( uint mask ) const

這是重載函數。

QFlags < T > QFlags:: operator& ( Enum other ) const

這是重載函數。

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^= ().

QFlags < T > &QFlags:: operator&= ( uint mask )

這是重載函數。

QFlags < T > &QFlags:: operator&= ( Enum mask )

這是重載函數。

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~ ().

QFlags < T > QFlags:: operator^ ( Enum other ) const

這是重載函數。

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|= ().

QFlags < T > &QFlags:: operator^= ( Enum other )

這是重載函數。

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~ ().

QFlags < T > QFlags:: operator| ( Enum other ) const

這是重載函數。

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^= ().

QFlags < T > &QFlags:: operator|= ( Enum other )

這是重載函數。

QFlags < T > QFlags:: operator~ () const

返迴 QFlags 對象包含此對象的按位取反。

另請參閱 operator& (), operator| (),和 operator^ ().

宏文檔編製

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 ().