The QFlags class provides a type-safe way of storing OR-combinations of enum values. More...
#include <QFlags>
typedef | enum_type |
QFlags ( const QFlags & other ) | |
QFlags ( Enum flag ) | |
QFlags ( Zero zero = 0 ) | |
QFlags ( QFlag value ) | |
bool | testFlag ( Enum flag ) const |
operator int () const | |
bool | operator! () const |
QFlags | operator& ( int mask ) const |
QFlags | operator& ( uint mask ) const |
QFlags | operator& ( Enum mask ) const |
QFlags & | operator&= ( int mask ) |
QFlags & | operator&= ( uint mask ) |
QFlags & | operator= ( const QFlags & other ) |
QFlags | operator^ ( QFlags other ) const |
QFlags | operator^ ( Enum other ) const |
QFlags & | operator^= ( QFlags other ) |
QFlags & | operator^= ( Enum other ) |
QFlags | operator| ( QFlags other ) const |
QFlags | operator| ( Enum other ) const |
QFlags & | operator|= ( QFlags other ) |
QFlags & | operator|= ( Enum other ) |
QFlags | operator~ () const |
Q_DECLARE_FLAGS ( Flags, Enum ) | |
Q_DECLARE_OPERATORS_FOR_FLAGS ( Flags ) |
The QFlags class provides a type-safe way of storing OR-combinations of enum values.
The QFlags<Enum> class is a template class, where Enum is an enum type. QFlags is used throughout Qt for storing combinations of enum values.
The traditional C++ approach for storing OR-combinations of enum values is to use an 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 uses QFlags to provide type safety. For example, the 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 0, is legal:
label->setAlignment(Qt::AlignLeft | Qt::AlignTop);
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() and Q_DECLARE_OPERATORS_FOR_FLAGS().
Example:
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 values.
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_FLAGS() macro must be used:
Q_FLAGS(Options)
A sensible naming convention for enum types and associated QFlags types is to give a singular name to the enum type (e.g., Option) and a plural name to the QFlags type (e.g., Options). 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).
See also QFlag.
Constructs a copy of other.
Constructs a QFlags object storing the given flag.
Constructs a QFlags object with no flags set. zero must be a literal 0 value.
Constructs a QFlags object initialized with the given integer value.
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.
Returns true if the flag is set, otherwise false.
This function was introduced in Qt 4.2.
Returns the value stored in the QFlags object as an integer.
Returns true if no flag is set (i.e., if the value stored by the QFlags object is 0); otherwise returns false.
Returns a QFlags object containing the result of the bitwise AND operation on this object and mask.
See also operator&=(), operator|(), operator^(), and operator~().
This is an overloaded function.
This is an overloaded function.
Performs a bitwise AND operation with mask and stores the result in this QFlags object. Returns a reference to this object.
See also operator&(), operator|=(), and operator^=().
This is an overloaded function.
Assigns other to this object and returns a reference to this object.
Returns a QFlags object containing the result of the bitwise XOR operation on this object and other.
See also operator^=(), operator&(), operator|(), and operator~().
This is an overloaded function.
Performs a bitwise XOR operation with other and stores the result in this QFlags object. Returns a reference to this object.
See also operator^(), operator&=(), and operator|=().
This is an overloaded function.
Returns a QFlags object containing the result of the bitwise OR operation on this object and other.
See also operator|=(), operator^(), operator&(), and operator~().
This is an overloaded function.
Performs a bitwise OR operation with other and stores the result in this QFlags object. Returns a reference to this object.
See also operator|(), operator&=(), and operator^=().
This is an overloaded function.
Returns a QFlags object that contains the bitwise negation of this object.
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.
See the QFlags documentation for details.
See also Q_DECLARE_OPERATORS_FOR_FLAGS().
The Q_DECLARE_OPERATORS_FOR_FLAGS() macro declares global operator|() functions for Flags, which is of type QFlags<T>.
See the QFlags documentation for details.
See also Q_DECLARE_FLAGS().
© 2008-2011 Nokia Corporation and/or its subsidiaries. Nokia, Qt and their respective logos are trademarks of Nokia Corporation in Finland and/or other countries worldwide.
All other trademarks are property of their respective owners. Privacy Policy
Licensees holding valid Qt Commercial licenses may use this document in accordance with the Qt Commercial License Agreement provided with the Software or, alternatively, in accordance with the terms contained in a written agreement between you and Nokia.
Alternatively, this document may be used under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation.