summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2020-08-13 12:31:00 +0200
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2020-08-17 15:08:39 +0200
commitb39685d4c26009d6f85cbbee287d5647a7bd6fe4 (patch)
tree55908fad446fe2207284846fccc6695a2e348327 /src
parent90436e54cc32e3fd32f7298c65ac236eaff01bba (diff)
Make QCursor constructor explicit to prevent comparison of QPixmap
QPixmap doesn't implement operator==, but QCursor had a non-explicit constructor from a QPixmap, which the compiler would use if two pixmaps get compared. Making that QCursor constructor explicit prevents that implicit conversion, at the cost of potential (but trivially resolved) source incompatibility. Also, make QCursor's comparison operators into hidden friends to avoid any other implicit conversions, and allow only QCursor object to be compared. In addition, delete operator== and operator!= in QPixmap so that the compiler generates a useful error message, rather than a screen full of global operator== candidates. Delete these operators in QIcon as well for consistency. Change-Id: I9b3f770da5718360ecc41c35cf327ef4f60d169b Fixes: QTBUG-85993 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/gui/image/qicon.h2
-rw-r--r--src/gui/image/qpixmap.h2
-rw-r--r--src/gui/kernel/qcursor.h6
3 files changed, 6 insertions, 4 deletions
diff --git a/src/gui/image/qicon.h b/src/gui/image/qicon.h
index 395de48410..18c6f6d083 100644
--- a/src/gui/image/qicon.h
+++ b/src/gui/image/qicon.h
@@ -72,6 +72,8 @@ public:
{ swap(other); return *this; }
inline void swap(QIcon &other) noexcept
{ qSwap(d, other.d); }
+ bool operator==(const QIcon &) const = delete;
+ bool operator!=(const QIcon &) const = delete;
operator QVariant() const;
diff --git a/src/gui/image/qpixmap.h b/src/gui/image/qpixmap.h
index 568ed6ecb5..19881bda2c 100644
--- a/src/gui/image/qpixmap.h
+++ b/src/gui/image/qpixmap.h
@@ -77,6 +77,8 @@ public:
{ qSwap(data, other.data); return *this; }
inline void swap(QPixmap &other) noexcept
{ qSwap(data, other.data); }
+ bool operator==(const QPixmap &) const = delete;
+ bool operator!=(const QPixmap &) const = delete;
operator QVariant() const;
diff --git a/src/gui/kernel/qcursor.h b/src/gui/kernel/qcursor.h
index 21ea13c0d7..c7ebe9366a 100644
--- a/src/gui/kernel/qcursor.h
+++ b/src/gui/kernel/qcursor.h
@@ -83,7 +83,7 @@ public:
QCursor();
QCursor(Qt::CursorShape shape);
QCursor(const QBitmap &bitmap, const QBitmap &mask, int hotX=-1, int hotY=-1);
- QCursor(const QPixmap &pixmap, int hotX=-1, int hotY=-1);
+ explicit QCursor(const QPixmap &pixmap, int hotX=-1, int hotY=-1);
QCursor(const QCursor &cursor);
~QCursor();
QCursor &operator=(const QCursor &cursor);
@@ -117,13 +117,11 @@ public:
private:
friend Q_GUI_EXPORT bool operator==(const QCursor &lhs, const QCursor &rhs) noexcept;
+ friend inline bool operator!=(const QCursor &lhs, const QCursor &rhs) noexcept { return !(lhs == rhs); }
QCursorData *d;
};
Q_DECLARE_SHARED(QCursor)
-Q_GUI_EXPORT bool operator==(const QCursor &lhs, const QCursor &rhs) noexcept;
-inline bool operator!=(const QCursor &lhs, const QCursor &rhs) noexcept { return !(lhs == rhs); }
-
/*****************************************************************************
QCursor stream functions
*****************************************************************************/