diff --git a/dist/changes-5.0.0 b/dist/changes-5.0.0 index 8daf897459..93b49ecf05 100644 --- a/dist/changes-5.0.0 +++ b/dist/changes-5.0.0 @@ -499,6 +499,11 @@ QTestLib -------- * [QTBUG-20615] Autotests can now log test output to multiple destinations and log formats simultaneously. +* [QTBUG-21645] QSignalSpy now handles QVariant signal parameters more + intuitively; the QVariant value is copied directly, instead of being + wrapped inside a new QVariant. This means that calling + qvariant_cast() on the QSignalSpy item (to "unwrap" the value) + is no longer required (but still works). QtSql ----- diff --git a/src/testlib/qsignalspy.h b/src/testlib/qsignalspy.h index 18def8f6c4..0740ba5622 100644 --- a/src/testlib/qsignalspy.h +++ b/src/testlib/qsignalspy.h @@ -147,7 +147,10 @@ private: QList list; for (int i = 0; i < args.count(); ++i) { QMetaType::Type type = static_cast(args.at(i)); - list << QVariant(type, a[i + 1]); + if (type == QMetaType::QVariant) + list << *reinterpret_cast(a[i + 1]); + else + list << QVariant(type, a[i + 1]); } append(list); diff --git a/tests/auto/testlib/qsignalspy/tst_qsignalspy.cpp b/tests/auto/testlib/qsignalspy/tst_qsignalspy.cpp index 07b762a7eb..c6419cd17c 100644 --- a/tests/auto/testlib/qsignalspy/tst_qsignalspy.cpp +++ b/tests/auto/testlib/qsignalspy/tst_qsignalspy.cpp @@ -157,6 +157,7 @@ signals: void sig2(const QDateTime &dt); void sig3(QObject *o); void sig4(QChar c); + void sig5(const QVariant &v); }; void tst_QSignalSpy::spyWithBasicQtClasses() @@ -168,6 +169,14 @@ void tst_QSignalSpy::spyWithBasicQtClasses() QCOMPARE(spy.count(), 1); QCOMPARE(spy.at(0).count(), 1); QCOMPARE(spy.at(0).at(0).toString(), QString("bubu")); + + QSignalSpy spy2(&obj, SIGNAL(sig5(QVariant))); + QVariant val(45); + emit obj.sig5(val); + QCOMPARE(spy2.count(), 1); + QCOMPARE(spy2.at(0).count(), 1); + QCOMPARE(spy2.at(0).at(0), val); + QCOMPARE(qvariant_cast(spy2.at(0).at(0)), val); } void tst_QSignalSpy::spyWithQtClasses()