Add setFlag method to QFlags
This makes implementing class methods that enable or disable a feature stored in a QFlags<> member easier. [ChangeLog][QtCore][QFlags] Added setFlag method to set or unset a flag Task-number: QTBUG-27100 Change-Id: Ic602abbbf3100df78f21b7918573744d1bbd18c1 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com> Reviewed-by: Marc Mutz <marc.mutz@kdab.com>bb10
parent
74adb1900a
commit
21861e6fd1
|
|
@ -145,6 +145,11 @@ public:
|
|||
Q_DECL_CONSTEXPR inline bool operator!() const Q_DECL_NOTHROW { return !i; }
|
||||
|
||||
Q_DECL_CONSTEXPR inline bool testFlag(Enum f) const Q_DECL_NOTHROW { return (i & Int(f)) == Int(f) && (Int(f) != 0 || i == Int(f) ); }
|
||||
Q_DECL_RELAXED_CONSTEXPR inline QFlags &setFlag(Enum f, bool on = true) Q_DECL_NOTHROW
|
||||
{
|
||||
return on ? (*this |= f) : (*this &= ~f);
|
||||
}
|
||||
|
||||
private:
|
||||
#ifdef Q_COMPILER_INITIALIZER_LISTS
|
||||
Q_DECL_CONSTEXPR static inline Int initializer_list_helper(typename std::initializer_list<Enum>::const_iterator it,
|
||||
|
|
|
|||
|
|
@ -425,6 +425,14 @@ Q_STATIC_ASSERT_X(QT_POINTER_SIZE == sizeof(void *), "QT_POINTER_SIZE defined in
|
|||
Returns \c true if the \a flag is set, otherwise \c false.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn QFlags QFlags::setFlag(Enum flag, bool on) const
|
||||
\since 5.7
|
||||
|
||||
Sets the indicated \a flag if \a on is \c true or unsets it if
|
||||
it if \a on is \c false. Returns a reference to this object.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\macro Q_DISABLE_COPY(Class)
|
||||
\relates QObject
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ private slots:
|
|||
void signedness();
|
||||
void classEnum();
|
||||
void initializerLists();
|
||||
void testSetFlags();
|
||||
};
|
||||
|
||||
void tst_QFlags::testFlag() const
|
||||
|
|
@ -278,6 +279,19 @@ void tst_QFlags::initializerLists()
|
|||
#endif // Q_COMPILER_INITIALIZER_LISTS
|
||||
}
|
||||
|
||||
void tst_QFlags::testSetFlags()
|
||||
{
|
||||
Qt::MouseButtons btn = Qt::NoButton;
|
||||
|
||||
btn.setFlag(Qt::LeftButton);
|
||||
QVERIFY(btn.testFlag(Qt::LeftButton));
|
||||
QVERIFY(!btn.testFlag(Qt::MidButton));
|
||||
|
||||
btn.setFlag(Qt::LeftButton, false);
|
||||
QVERIFY(!btn.testFlag(Qt::LeftButton));
|
||||
QVERIFY(!btn.testFlag(Qt::MidButton));
|
||||
}
|
||||
|
||||
// (statically) check QTypeInfo for QFlags instantiations:
|
||||
enum MyEnum { Zero, One, Two, Four=4 };
|
||||
Q_DECLARE_FLAGS( MyFlags, MyEnum )
|
||||
|
|
|
|||
Loading…
Reference in New Issue