summaryrefslogtreecommitdiffstats
path: root/src/corelib/global/qflags.qdoc
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/global/qflags.qdoc')
-rw-r--r--src/corelib/global/qflags.qdoc459
1 files changed, 459 insertions, 0 deletions
diff --git a/src/corelib/global/qflags.qdoc b/src/corelib/global/qflags.qdoc
new file mode 100644
index 0000000000..dd3b1e4c9b
--- /dev/null
+++ b/src/corelib/global/qflags.qdoc
@@ -0,0 +1,459 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \class QFlag
+ \inmodule QtCore
+ \brief The QFlag class is a helper data type for QFlags.
+
+ It is equivalent to a plain \c int, except with respect to
+ function overloading and type conversions. You should never need
+ to use this class in your applications.
+
+ \sa QFlags
+*/
+
+/*!
+ \fn QFlag::QFlag(int value)
+
+ Constructs a QFlag object that stores the \a value.
+*/
+
+/*!
+ \fn QFlag::QFlag(uint value)
+ \since 5.3
+
+ Constructs a QFlag object that stores the \a value.
+*/
+
+/*!
+ \fn QFlag::QFlag(short value)
+ \since 5.3
+
+ Constructs a QFlag object that stores the \a value.
+*/
+
+/*!
+ \fn QFlag::QFlag(ushort value)
+ \since 5.3
+
+ Constructs a QFlag object that stores the \a value.
+*/
+
+/*!
+ \fn QFlag::operator int() const
+
+ Returns the value stored by the QFlag object.
+*/
+
+/*!
+ \fn QFlag::operator uint() const
+ \since 5.3
+
+ Returns the value stored by the QFlag object.
+*/
+
+/*!
+ \class QFlags
+ \inmodule QtCore
+ \brief The QFlags class provides a type-safe way of storing
+ OR-combinations of enum values.
+
+
+ \ingroup tools
+
+ 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 \c int or \c 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 \c int or \c 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 \c{{ }}, is legal:
+
+ \snippet code/src_corelib_global_qglobal.cpp 0
+
+ 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:
+
+ \snippet code/src_corelib_global_qglobal.cpp 1
+
+ You can then use the \c MyClass::Options type to store
+ combinations of \c MyClass::Option values.
+
+ \section1 Flags and the Meta-Object System
+
+ 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 \QD.
+ To make the flags available for these purposes, the Q_FLAG() macro must
+ be used:
+
+ \snippet code/src_corelib_global_qglobal.cpp meta-object flags
+
+ \section1 Naming Convention
+
+ A sensible naming convention for enum types and associated QFlags
+ types is to give a singular name to the enum type (e.g., \c
+ Option) and a plural name to the QFlags type (e.g., \c Options).
+ When a singular name is desired for the QFlags type (e.g., \c
+ Alignment), you can use \c Flag as the suffix for the enum type
+ (e.g., \c AlignmentFlag).
+
+ \sa QFlag
+*/
+
+/*!
+ \typedef QFlags::Int
+ \since 5.0
+
+ Typedef for the integer type used for storage as well as for
+ implicit conversion. Either \c int or \c{unsigned int}, depending
+ on whether the enum's underlying type is signed or unsigned.
+*/
+
+/*!
+ \typedef QFlags::enum_type
+
+ Typedef for the Enum template type.
+*/
+
+/*!
+ \fn template<typename Enum> QFlags<Enum>::QFlags(const QFlags &other)
+
+ Constructs a copy of \a other.
+*/
+
+/*!
+ \fn template <typename Enum> QFlags<Enum>::QFlags(Enum flags)
+
+ Constructs a QFlags object storing the \a flags.
+*/
+
+/*!
+ \fn template <typename Enum> QFlags<Enum>::QFlags()
+ \since 5.15
+
+ Constructs a QFlags object with no flags set.
+*/
+
+/*!
+ \fn template <typename Enum> QFlags<Enum>::QFlags(QFlag flag)
+
+ Constructs a QFlags object initialized with the integer \a flag.
+
+ The QFlag type is a helper type. By using it here instead of \c
+ int, we effectively ensure that arbitrary enum values cannot be
+ cast to a QFlags, whereas untyped enum values (i.e., \c int
+ values) can.
+*/
+
+/*!
+ \fn template <typename Enum> QFlags<Enum>::QFlags(std::initializer_list<Enum> flags)
+ \since 5.4
+
+ Constructs a QFlags object initialized with all \a flags
+ combined using the bitwise OR operator.
+
+ \sa operator|=(), operator|()
+*/
+
+/*!
+ \fn template <typename Enum> QFlags &QFlags<Enum>::operator=(const QFlags &other)
+
+ Assigns \a other to this object and returns a reference to this
+ object.
+*/
+
+/*!
+ \fn template <typename Enum> QFlags &QFlags<Enum>::operator&=(int mask)
+
+ Performs a bitwise AND operation with \a mask and stores the
+ result in this QFlags object. Returns a reference to this object.
+
+ \sa operator&(), operator|=(), operator^=()
+*/
+
+/*!
+ \fn template <typename Enum> QFlags &QFlags<Enum>::operator&=(uint mask)
+
+ \overload
+*/
+
+/*!
+ \fn template <typename Enum> QFlags &QFlags<Enum>::operator&=(Enum mask)
+
+ \overload
+*/
+
+/*!
+ \fn template <typename Enum> QFlags &QFlags<Enum>::operator&=(QFlags mask)
+ \since 6.2
+
+ \overload
+*/
+
+/*!
+ \fn template <typename Enum> QFlags &QFlags<Enum>::operator|=(QFlags other)
+
+ Performs a bitwise OR operation with \a other and stores the
+ result in this QFlags object. Returns a reference to this object.
+
+ \sa operator|(), operator&=(), operator^=()
+*/
+
+/*!
+ \fn template <typename Enum> QFlags &QFlags<Enum>::operator|=(Enum other)
+
+ \overload
+*/
+
+/*!
+ \fn template <typename Enum> QFlags &QFlags<Enum>::operator^=(QFlags other)
+
+ Performs a bitwise XOR operation with \a other and stores the
+ result in this QFlags object. Returns a reference to this object.
+
+ \sa operator^(), operator&=(), operator|=()
+*/
+
+/*!
+ \fn template <typename Enum> QFlags &QFlags<Enum>::operator^=(Enum other)
+
+ \overload
+*/
+
+/*!
+ \fn template <typename Enum> QFlags<Enum>::operator Int() const
+
+ Returns the value stored in the QFlags object as an integer.
+
+ \sa Int
+*/
+
+/*!
+ \fn template <typename Enum> QFlags QFlags<Enum>::operator|(QFlags other) const
+
+ Returns a QFlags object containing the result of the bitwise OR
+ operation on this object and \a other.
+
+ \sa operator|=(), operator^(), operator&(), operator~()
+*/
+
+/*!
+ \fn template <typename Enum> QFlags QFlags<Enum>::operator|(Enum other) const
+
+ \overload
+*/
+
+/*!
+ \fn template <typename Enum> QFlags QFlags<Enum>::operator^(QFlags other) const
+
+ Returns a QFlags object containing the result of the bitwise XOR
+ operation on this object and \a other.
+
+ \sa operator^=(), operator&(), operator|(), operator~()
+*/
+
+/*!
+ \fn template <typename Enum> QFlags QFlags<Enum>::operator^(Enum other) const
+
+ \overload
+*/
+
+/*!
+ \fn template <typename Enum> QFlags QFlags<Enum>::operator&(int mask) const
+
+ Returns a QFlags object containing the result of the bitwise AND
+ operation on this object and \a mask.
+
+ \sa operator&=(), operator|(), operator^(), operator~()
+*/
+
+/*!
+ \fn template <typename Enum> QFlags QFlags<Enum>::operator&(uint mask) const
+
+ \overload
+*/
+
+/*!
+ \fn template <typename Enum> QFlags QFlags<Enum>::operator&(Enum mask) const
+
+ \overload
+*/
+
+/*!
+ \fn template <typename Enum> QFlags QFlags<Enum>::operator&(QFlags mask) const
+ \since 6.2
+
+ \overload
+*/
+
+/*!
+ \fn template <typename Enum> QFlags QFlags<Enum>::operator~() const
+
+ Returns a QFlags object that contains the bitwise negation of
+ this object.
+
+ \sa operator&(), operator|(), operator^()
+*/
+
+/*!
+ \fn template <typename Enum> bool QFlags<Enum>::operator!() const
+
+ Returns \c true if no flag is set (i.e., if the value stored by the
+ QFlags object is 0); otherwise returns \c false.
+*/
+
+/*!
+ \fn template <typename Enum> bool QFlags<Enum>::testFlag(Enum flag) const
+ \since 4.2
+
+ Returns \c true if the flag \a flag is set, otherwise \c false.
+
+ \note if \a 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 \c true if and only if all the bits
+ are set in this flags object. On the other hand, if \a flag contains
+ no bits set to 1 (that is, its value as a integer is 0), then this
+ function will return \c true if and only if this flags object also
+ has no bits set to 1.
+
+ \sa testAnyFlag()
+*/
+
+/*!
+ \fn template <typename Enum> bool QFlags<Enum>::testFlags(QFlags flags) const noexcept
+ \since 6.2
+
+ Returns \c true if this flags object matches the given \a flags.
+
+ If \a flags has any flags set, this flags object matches precisely
+ if all flags set in \a flags are also set in this flags object.
+ Otherwise, when \a flags has no flags set, this flags object only
+ matches if it also has no flags set.
+
+ \sa testAnyFlags()
+*/
+
+/*!
+ \fn template <typename Enum> bool QFlags<Enum>::testAnyFlag(Enum flag) const noexcept
+ \since 6.2
+
+ Returns \c true if \b any flag set in \a flag is also set in this
+ flags object, otherwise \c false. If \a flag has no flags set, the
+ return will always be \c false.
+
+ \sa testFlag()
+*/
+
+/*!
+ \fn template <typename Enum> bool QFlags<Enum>::testAnyFlags(QFlags flags) const noexcept
+ \since 6.2
+
+ Returns \c true if \b any flag set in \a flags is also set in this
+ flags object, otherwise \c false. If \a flags has no flags set, the
+ return will always be \c false.
+
+ \sa testFlags()
+*/
+
+/*!
+ \fn template <typename Enum> QFlags QFlags<Enum>::setFlag(Enum flag, bool on)
+ \since 5.7
+
+ Sets the flag \a flag if \a on is \c true or unsets it if
+ \a on is \c false. Returns a reference to this object.
+*/
+
+/*!
+ \fn template <typename Enum> QFlags<Enum> QFlags<Enum>::fromInt(Int i) noexcept
+ \since 6.2
+
+ Constructs a QFlags object representing the integer value \a i.
+*/
+
+/*!
+ \fn template <typename Enum> Int QFlags<Enum>::toInt() const noexcept
+ \since 6.2
+
+ Returns the value stored in the 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.
+
+ \sa Int
+*/
+
+/*!
+ \fn template <typename Enum> size_t qHash(QFlags<Enum> flags, size_t seed = 0) noexcept
+ \since 6.2
+ \relates QFlags
+
+ Calculates the hash for the flags \a flags, using \a seed
+ to seed the calculation.
+*/
+
+/*!
+ \fn template <typename Enum> bool operator==(QFlags<Enum> lhs, QFlags<Enum> rhs)
+ \fn template <typename Enum> bool operator==(QFlags<Enum> lhs, Enum rhs)
+ \fn template <typename Enum> bool operator==(Enum lhs, QFlags<Enum> rhs)
+ \since 6.2
+ \relates QFlags
+
+ Compares \a lhs and \a rhs for equality; the two arguments are
+ considered equal if they represent exactly the same value
+ (bitmask).
+*/
+
+/*!
+ \fn template <typename Enum> bool operator!=(QFlags<Enum> lhs, QFlags<Enum> rhs)
+ \fn template <typename Enum> bool operator!=(QFlags<Enum> lhs, Enum rhs)
+ \fn template <typename Enum> bool operator!=(Enum lhs, QFlags<Enum> rhs)
+ \since 6.2
+ \relates QFlags
+
+ Compares \a lhs and \a rhs for inequality; the two arguments are
+ considered different if they don't represent exactly the same value
+ (bitmask).
+*/
+
+/*!
+ \macro Q_DECLARE_FLAGS(Flags, Enum)
+ \relates QFlags
+
+ The Q_DECLARE_FLAGS() macro expands to
+
+ \snippet code/src_corelib_global_qglobal.cpp 2
+
+ \a Enum is the name of an existing enum type, whereas \a Flags is
+ the name of the QFlags<\e{Enum}> typedef.
+
+ See the QFlags documentation for details.
+
+ \sa Q_DECLARE_OPERATORS_FOR_FLAGS()
+*/
+
+/*!
+ \macro Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)
+ \relates QFlags
+
+ The Q_DECLARE_OPERATORS_FOR_FLAGS() macro declares global \c
+ operator|() functions for \a Flags, which is of type QFlags<T>.
+
+ See the QFlags documentation for details.
+
+ \sa Q_DECLARE_FLAGS()
+*/