diff options
-rw-r--r-- | src/gui/image/qpixmap.cpp | 9 | ||||
-rw-r--r-- | src/gui/image/qpixmap.h | 2 | ||||
-rw-r--r-- | tests/auto/gui/image/qpixmap/tst_qpixmap.cpp | 15 |
3 files changed, 26 insertions, 0 deletions
diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index 3847366b4d..c3ae853795 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -224,6 +224,15 @@ QPixmap::QPixmap(const QPixmap &pixmap) } } +/*! \fn QPixmap::QPixmap(QPixmap &&other) + Move-constructs a QPixmap instance from \a other. + + \sa swap() operator=(QPixmap&&) +*/ +template<> +QExplicitlySharedDataPointer<QPlatformPixmap>::~QExplicitlySharedDataPointer() +{ if (d && !d->ref.deref()) delete d; } + /*! Constructs a pixmap from the given \a xpm data, which must be a valid XPM image. diff --git a/src/gui/image/qpixmap.h b/src/gui/image/qpixmap.h index 19881bda2c..b30bef0f6b 100644 --- a/src/gui/image/qpixmap.h +++ b/src/gui/image/qpixmap.h @@ -57,6 +57,7 @@ class QImageReader; class QColor; class QVariant; class QPlatformPixmap; +template<> Q_GUI_EXPORT QExplicitlySharedDataPointer<QPlatformPixmap>::~QExplicitlySharedDataPointer(); class Q_GUI_EXPORT QPixmap : public QPaintDevice { @@ -70,6 +71,7 @@ public: explicit QPixmap(const char * const xpm[]); #endif QPixmap(const QPixmap &); + QPixmap(QPixmap &&other) noexcept : QPaintDevice(), data(std::move(other.data)) {} ~QPixmap(); QPixmap &operator=(const QPixmap &); diff --git a/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp index 33e8671671..39d58effd3 100644 --- a/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp +++ b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp @@ -118,6 +118,7 @@ private slots: void refUnref(); void copy(); + void move(); void deepCopyPreservesDpr(); void dprPassthrough(); void depthOfNullObjects(); @@ -1142,6 +1143,20 @@ void tst_QPixmap::copy() QCOMPARE(trans, transCopy); } +void tst_QPixmap::move() +{ + QPixmap moveFrom(32, 32); + + QPixmap moveAssigned; + moveAssigned = std::move(moveFrom); + QVERIFY(!moveAssigned.isNull()); + QVERIFY(moveFrom.isNull()); + + QPixmap moveConstructed(std::move(moveAssigned)); + QVERIFY(moveAssigned.isNull()); + QVERIFY(!moveConstructed.isNull()); +} + // QTBUG-58653: Force a deep copy of a pixmap by // having a QPainter and check whether DevicePixelRatio is preserved void tst_QPixmap::deepCopyPreservesDpr() |