diff options
-rw-r--r-- | src/corelib/kernel/qobject.cpp | 20 | ||||
-rw-r--r-- | tests/auto/corelib/kernel/qobject/tst_qobject.cpp | 27 |
2 files changed, 34 insertions, 13 deletions
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index 09b68f0943..f4914a7ca8 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -4160,12 +4160,9 @@ QList<QByteArray> QObject::dynamicPropertyNames() const static void dumpRecursive(int level, const QObject *object) { if (object) { - QByteArray buf; - buf.fill(' ', level / 2 * 8); - if (level % 2) - buf += " "; - QString name = object->objectName(); - QString flags = QLatin1String(""); + const int indent = level * 4; + const QString name = object->objectName(); + QString flags; #if 0 if (qApp->focusWidget() == object) flags += 'F'; @@ -4179,13 +4176,10 @@ static void dumpRecursive(int level, const QObject *object) } } #endif - qDebug("%s%s::%s %s", (const char*)buf, object->metaObject()->className(), name.toLocal8Bit().data(), - flags.toLatin1().data()); - QObjectList children = object->children(); - if (!children.isEmpty()) { - for (int i = 0; i < children.size(); ++i) - dumpRecursive(level+1, children.at(i)); - } + qDebug("%*s%s::%ls %ls", indent, "", object->metaObject()->className(), + qUtf16Printable(name), qUtf16Printable(flags)); + for (auto child : object->children()) + dumpRecursive(level + 1, child); } } diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp index bf30282822..af4b35fb46 100644 --- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp +++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp @@ -108,6 +108,7 @@ private slots: void deleteSelfInSlot(); void disconnectSelfInSlotAndDeleteAfterEmit(); void dumpObjectInfo(); + void dumpObjectTree(); void connectToSender(); void qobjectConstCast(); void uniqConnection(); @@ -3413,6 +3414,32 @@ void tst_QObject::dumpObjectInfo() a.dumpObjectInfo(); // should not crash } +void tst_QObject::dumpObjectTree() +{ + QObject a; + Q_SET_OBJECT_NAME(a); + + QTimer b(&a); + Q_SET_OBJECT_NAME(b); + + QObject c(&b); + Q_SET_OBJECT_NAME(c); + + QFile f(&a); + Q_SET_OBJECT_NAME(f); + + const char * const output[] = { + "QObject::a ", + " QTimer::b ", + " QObject::c ", + " QFile::f ", + }; + for (const char *line : output) + QTest::ignoreMessage(QtDebugMsg, line); + + a.dumpObjectTree(); +} + class ConnectToSender : public QObject { Q_OBJECT public slots: |