From 546d52e605b6a74d9a5be26fb374b831a46f2550 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Sun, 8 Sep 2013 08:49:29 +0200 Subject: Add a convenient way to get a type-erased smart pointer from a QVariant. Any known smart pointer in a QVariant can be handled in this way. The metatype system can be informed of new smart pointer types using an existing macro which is now documented. This is very similar to the existing infrastructure for containers. Change-Id: Iac4f9fabbc5a0626c04e1185d51d720b8b54603d Reviewed-by: Olivier Goffart --- .../auto/corelib/kernel/qvariant/tst_qvariant.cpp | 53 ++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp') diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp index 502e2504c9..c59e87cf13 100644 --- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp +++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp @@ -2300,6 +2300,8 @@ Q_DECLARE_ASSOCIATIVE_CONTAINER_METATYPE(MyNS::AssociativeContainer) // Test that explicit declaration does not degrade features. Q_DECLARE_METATYPE(MyNS::SmartPointer) +Q_DECLARE_METATYPE(MyNS::SmartPointer) +Q_DECLARE_METATYPE(QSharedPointer) void tst_QVariant::qvariant_cast_QObject_wrapper() { @@ -2319,6 +2321,57 @@ void tst_QVariant::qvariant_cast_QObject_wrapper() QVariant::fromValue(sc); QVariant::fromValue(ac); + { + QFile *f = new QFile(this); + MyNS::SmartPointer sp(f); + QVariant spVar = QVariant::fromValue(sp); + QVERIFY(spVar.canConvert()); + QCOMPARE(f, spVar.value()); + } + { + QFile *f = new QFile(this); + QPointer sp(f); + QVariant spVar = QVariant::fromValue(sp); + QVERIFY(spVar.canConvert()); + QCOMPARE(f, spVar.value()); + } + { + QFile *f = new QFile(this); + QWeakPointer sp(f); + QVariant spVar = QVariant::fromValue(sp); + QVERIFY(spVar.canConvert()); + QCOMPARE(f, spVar.value()); + } + { + QFile *f = new QFile(this); + QSharedPointer sp(f); + QWeakPointer wp = sp.toWeakRef(); + QVariant wpVar = QVariant::fromValue(wp); + QVERIFY(wpVar.canConvert()); + QCOMPARE(f, wpVar.value()); + } + { + QFile *f = new QFile(this); + QSharedPointer sp(f); + QVariant spVar = QVariant::fromValue(sp); + QVERIFY(spVar.canConvert()); + QCOMPARE(f, spVar.value()); + } + { + QIODevice *f = new QFile(this); + MyNS::SmartPointer sp(f); + QVariant spVar = QVariant::fromValue(sp); + QVERIFY(spVar.canConvert()); + QCOMPARE(f, spVar.value()); + } + { + QIODevice *f = new QFile(this); + QSharedPointer sp(f); + QVariant spVar = QVariant::fromValue(sp); + QVERIFY(spVar.canConvert()); + QCOMPARE(f, spVar.value()); + } + // Compile tests: qRegisterMetaType >(); // Not declared as a metatype: -- cgit v1.2.3