diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h index 4d3b6ab099c..2398c0a1a49 100644 --- a/src/corelib/global/qnamespace.h +++ b/src/corelib/global/qnamespace.h @@ -10,6 +10,7 @@ #endif #include +#include #include #if defined(__OBJC__) && !defined(__cplusplus) @@ -1908,18 +1909,14 @@ public: return combination; } #endif - - friend constexpr bool operator==(QKeyCombination lhs, QKeyCombination rhs) noexcept + bool operator<(QKeyCombination) const = delete; +private: + friend constexpr bool comparesEqual(const QKeyCombination &lhs, + const QKeyCombination &rhs) noexcept { return lhs.combination == rhs.combination; } - - friend constexpr bool operator!=(QKeyCombination lhs, QKeyCombination rhs) noexcept - { - return lhs.combination != rhs.combination; - } - - bool operator<(QKeyCombination) const = delete; + Q_DECLARE_EQUALITY_COMPARABLE_LITERAL_TYPE(QKeyCombination) }; Q_DECLARE_TYPEINFO(QKeyCombination, Q_RELOCATABLE_TYPE); diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc index f3796639c11..ddfade675a3 100644 --- a/src/corelib/global/qnamespace.qdoc +++ b/src/corelib/global/qnamespace.qdoc @@ -3407,6 +3407,8 @@ \since 6.0 \brief The QKeyCombination class stores a combination of a key with optional modifiers. + \compares equality + The QKeyCombination class can be used to represent a combination of a key with zero or more keyboard modifiers. @@ -3489,14 +3491,14 @@ #endif /*! - \fn bool QKeyCombination::operator==(QKeyCombination lhs, QKeyCombination rhs) noexcept + \fn bool QKeyCombination::operator==(const QKeyCombination &lhs, const QKeyCombination &rhs) Returns \c true if \a lhs and \a rhs have the same combination of key and modifiers, and \c false otherwise. */ /*! - \fn bool QKeyCombination::operator!=(QKeyCombination lhs, QKeyCombination rhs) noexcept + \fn bool QKeyCombination::operator!=(const QKeyCombination &lhs, const QKeyCombination &rhs) Returns \c true if \a lhs and \a rhs have different combinations of key and modifiers, otherwise \c false. diff --git a/tests/auto/corelib/global/qkeycombination/CMakeLists.txt b/tests/auto/corelib/global/qkeycombination/CMakeLists.txt index 0b1d519e4f0..911eef7289f 100644 --- a/tests/auto/corelib/global/qkeycombination/CMakeLists.txt +++ b/tests/auto/corelib/global/qkeycombination/CMakeLists.txt @@ -14,4 +14,6 @@ endif() qt_internal_add_test(tst_qkeycombination SOURCES tst_qkeycombination.cpp + LIBRARIES + Qt::TestPrivate ) diff --git a/tests/auto/corelib/global/qkeycombination/tst_qkeycombination.cpp b/tests/auto/corelib/global/qkeycombination/tst_qkeycombination.cpp index 06da0d24445..9941f8e1545 100644 --- a/tests/auto/corelib/global/qkeycombination/tst_qkeycombination.cpp +++ b/tests/auto/corelib/global/qkeycombination/tst_qkeycombination.cpp @@ -3,11 +3,13 @@ #include #include +#include class tst_QKeyCombination : public QObject { Q_OBJECT private slots: + void compareCompiles(); void construction(); void operator_eq(); void operator_or(); @@ -24,6 +26,11 @@ constexpr auto bitwiseOr(T ... args) return (... | ((int)args)); } +void tst_QKeyCombination::compareCompiles() +{ + QTestPrivate::testEqualityOperatorsCompile(); +} + void tst_QKeyCombination::construction() { { @@ -131,145 +138,125 @@ void tst_QKeyCombination::operator_eq() // default { QKeyCombination a, b; - QVERIFY(a == b); - QVERIFY(!(a != b)); + QT_TEST_EQUALITY_OPS(a, b, true); } // key only { QKeyCombination a; QKeyCombination b(Qt::Key_X); - QVERIFY(a != b); - QVERIFY(!(a == b)); + QT_TEST_EQUALITY_OPS(a, b, false); } { QKeyCombination a(Qt::Key_Y); QKeyCombination b; - QVERIFY(a != b); - QVERIFY(!(a == b)); + QT_TEST_EQUALITY_OPS(a, b, false); } { QKeyCombination a(Qt::Key_Y); QKeyCombination b(Qt::Key_X); - QVERIFY(a != b); - QVERIFY(!(a == b)); + QT_TEST_EQUALITY_OPS(a, b, false); } { QKeyCombination a(Qt::Key_F1); QKeyCombination b(Qt::Key_F1); - QVERIFY(a == b); - QVERIFY(!(a != b)); + QT_TEST_EQUALITY_OPS(a, b, true); } // modifier only { QKeyCombination a; QKeyCombination b(Qt::CTRL); - QVERIFY(a != b); - QVERIFY(!(a == b)); + QT_TEST_EQUALITY_OPS(a, b, false); } { QKeyCombination a(Qt::CTRL); QKeyCombination b; - QVERIFY(a != b); - QVERIFY(!(a == b)); + QT_TEST_EQUALITY_OPS(a, b, false); } { QKeyCombination a(Qt::CTRL); QKeyCombination b(Qt::SHIFT); - QVERIFY(a != b); - QVERIFY(!(a == b)); + QT_TEST_EQUALITY_OPS(a, b, false); } { QKeyCombination a(Qt::CTRL); QKeyCombination b(Qt::CTRL); - QVERIFY(a == b); - QVERIFY(!(a != b)); + QT_TEST_EQUALITY_OPS(a, b, true); } { QKeyCombination a(Qt::CTRL); QKeyCombination b(Qt::ControlModifier); - QVERIFY(a == b); - QVERIFY(!(a != b)); + QT_TEST_EQUALITY_OPS(a, b, true); } { QKeyCombination a(Qt::ControlModifier); QKeyCombination b(Qt::CTRL); - QVERIFY(a == b); - QVERIFY(!(a != b)); + QT_TEST_EQUALITY_OPS(a, b, true); } { QKeyCombination a(Qt::ControlModifier); QKeyCombination b(Qt::ControlModifier); - QVERIFY(a == b); - QVERIFY(!(a != b)); + QT_TEST_EQUALITY_OPS(a, b, true); } // key and modifier { QKeyCombination a(Qt::Key_A); QKeyCombination b(Qt::SHIFT, Qt::Key_A); - QVERIFY(a != b); - QVERIFY(!(a == b)); + QT_TEST_EQUALITY_OPS(a, b, false); } { QKeyCombination a(Qt::CTRL, Qt::Key_A); QKeyCombination b(Qt::SHIFT, Qt::Key_A); - QVERIFY(a != b); - QVERIFY(!(a == b)); + QT_TEST_EQUALITY_OPS(a, b, false); } { QKeyCombination a(Qt::SHIFT, Qt::Key_A); QKeyCombination b(Qt::SHIFT, Qt::Key_A); - QVERIFY(a == b); - QVERIFY(!(a != b)); + QT_TEST_EQUALITY_OPS(a, b, true); } { QKeyCombination a(Qt::SHIFT, Qt::Key_A); QKeyCombination b(Qt::SHIFT, Qt::Key_Escape); - QVERIFY(a != b); - QVERIFY(!(a == b)); + QT_TEST_EQUALITY_OPS(a, b, false); } { QKeyCombination a(Qt::SHIFT, Qt::Key_A); QKeyCombination b(Qt::ShiftModifier, Qt::Key_A); - QVERIFY(a == b); - QVERIFY(!(a != b)); + QT_TEST_EQUALITY_OPS(a, b, true); } { QKeyCombination a(Qt::SHIFT | Qt::CTRL, Qt::Key_A); QKeyCombination b(Qt::ControlModifier | Qt::ShiftModifier, Qt::Key_A); - QVERIFY(a == b); - QVERIFY(!(a != b)); + QT_TEST_EQUALITY_OPS(a, b, true); } // corner cases { QKeyCombination a(Qt::CTRL); QKeyCombination b(Qt::Key_Control); - QVERIFY(a != b); - QVERIFY(!(a == b)); + QT_TEST_EQUALITY_OPS(a, b, false); } { QKeyCombination a(Qt::ALT); QKeyCombination b(Qt::Key_Alt); - QVERIFY(a != b); - QVERIFY(!(a == b)); + QT_TEST_EQUALITY_OPS(a, b, false); } }