summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/image/qpixmap.cpp9
-rw-r--r--src/gui/image/qpixmap.h2
-rw-r--r--tests/auto/gui/image/qpixmap/tst_qpixmap.cpp15
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()