From 77fd8fd9977b987c99acba6417ac369a9975d989 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Mon, 16 Apr 2012 01:17:00 +0200 Subject: [PATCH] Show the type and address of QObjects in debug output. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Change-Id: I9f44ab80a6fb763adc9cbaf47de8e1b97212332d Reviewed-by: Jędrzej Nowacki --- src/corelib/kernel/qvariant.cpp | 8 +++++++- tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index 654170f..82e0435 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -834,7 +834,13 @@ static bool customConvert(const QVariant::Private *, int, void *, bool *ok) } #if !defined(QT_NO_DEBUG_STREAM) -static void customStreamDebug(QDebug, const QVariant &) {} +static void customStreamDebug(QDebug dbg, const QVariant &variant) { +#ifndef QT_BOOTSTRAPPED + QMetaType::TypeFlags flags = QMetaType::typeFlags(variant.userType()); + if (flags & QMetaType::PointerToQObject) + dbg.nospace() << variant.value(); +#endif +} #endif const QVariant::Handler qt_custom_variant_handler = { diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp index 1e382dd..6a6460d 100644 --- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp +++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp @@ -3666,6 +3666,11 @@ protected: // Chars insert '\0' into the qdebug stream, it is not possible to find a real string length return; } + if (QMetaType::typeFlags(currentId) & QMetaType::PointerToQObject) { + QByteArray currentName = QMetaType::typeName(currentId); + currentName.chop(1); + ok &= (msg.contains(", " + currentName) || msg.contains(", 0x0")); + } ok &= msg.endsWith(") "); QVERIFY2(ok, (QString::fromLatin1("Message is not correctly finished: '") + msg + '\'').toLatin1().constData()); @@ -3694,6 +3699,7 @@ void tst_QVariant::debugStream_data() QTest::newRow("CustomStreamableClass") << QVariant(qMetaTypeId(), 0) << qMetaTypeId(); QTest::newRow("MyClass") << QVariant(qMetaTypeId(), 0) << qMetaTypeId(); QTest::newRow("InvalidVariant") << QVariant() << int(QMetaType::UnknownType); + QTest::newRow("CustomQObject") << QVariant::fromValue(this) << qMetaTypeId(); } void tst_QVariant::debugStream() -- 2.7.4