summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2021-05-02 00:51:06 +0200
committerGiuseppe D'Angelo <giuseppe.dangelo@kdab.com>2021-05-11 13:22:44 +0200
commite906bb84fba0311b5bc1ec1344dc70ca34981194 (patch)
tree76c4f654b86befa8ccf8f1c85e182eb0a20e5e2b /src
parentf385b8827a75688b8a2cbd51e8da8a602d7f9567 (diff)
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 <thiago.macieira@intel.com>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/global/qflags.h3
-rw-r--r--src/corelib/global/qglobal.cpp18
2 files changed, 21 insertions, 0 deletions
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<Enum> 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
@@ -498,6 +498,24 @@ static_assert(sizeof(qint64) == 8, "Internal error, qint64 is misdefined");
*/
/*!
+ \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
+*/
+
+/*!
\macro Q_DISABLE_COPY(Class)
\relates QObject