From e906bb84fba0311b5bc1ec1344dc70ca34981194 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Sun, 2 May 2021 00:51:06 +0200 Subject: [PATCH] QFlags: add (named) explicit conversion from/to int There are some use cases where one may want to convert a QFlags object from/to an integer deliberately; for instance, to store it in a bitfield, saving some space. So far this worked by means of a implicit conversions; instead, also add named conversions for this. [ChangeLog][QtCore][QFlags] Added the fromInt() and toInt() functions for explicit conversions from/to a plain integer. Change-Id: I705559bf75b28c30b4446bb6d0753aedfc808eed Reviewed-by: Thiago Macieira --- src/corelib/global/qflags.h | 3 +++ src/corelib/global/qglobal.cpp | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/corelib/global/qflags.h b/src/corelib/global/qflags.h index 8d538c97f4..0e20f88c9c 100644 --- a/src/corelib/global/qflags.h +++ b/src/corelib/global/qflags.h @@ -112,6 +112,9 @@ public: constexpr inline QFlags(std::initializer_list flags) noexcept : i(initializer_list_helper(flags.begin(), flags.end())) {} + constexpr static inline QFlags fromInt(Int i) noexcept { return QFlags(QFlag(i)); } + constexpr inline Int toInt() const noexcept { return i; } + constexpr inline QFlags &operator&=(int mask) noexcept { i &= mask; return *this; } constexpr inline QFlags &operator&=(uint mask) noexcept { i &= mask; return *this; } constexpr inline QFlags &operator&=(Enum mask) noexcept { i &= Int(mask); return *this; } diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index 95f5adab3b..dea3b30a29 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -497,6 +497,24 @@ static_assert(sizeof(qint64) == 8, "Internal error, qint64 is misdefined"); \a on is \c false. Returns a reference to this object. */ +/*! + \fn template QFlags QFlags::fromInt(Int i) noexcept + \since 6.2 + + Constructs a QFlags object representing the integer value \a i. +*/ + +/*! + \fn template Int QFlags::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 +*/ + /*! \macro Q_DISABLE_COPY(Class) \relates QObject