diff --git a/src/widgets/widgets/qdockarealayout.cpp b/src/widgets/widgets/qdockarealayout.cpp index 2f1b7aa6e60..27eed4075f9 100644 --- a/src/widgets/widgets/qdockarealayout.cpp +++ b/src/widgets/widgets/qdockarealayout.cpp @@ -172,13 +172,27 @@ QDockAreaLayoutItem } #ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug dbg, const QDockAreaLayoutItem *item) +{ + QDebugStateSaver saver(dbg); + dbg.nospace(); + return item ? dbg << *item : dbg << "QDockAreaLayoutItem(0x0)"; +} + QDebug operator<<(QDebug dbg, const QDockAreaLayoutItem &item) { QDebugStateSaver saver(dbg); dbg.nospace(); dbg << "QDockAreaLayoutItem(" << static_cast(&item) << "->"; if (item.widgetItem) { - dbg << "widgetItem(" << item.widgetItem->widget() << ")"; + QWidget *widget = item.widgetItem->widget(); + if (auto *dockWidget = qobject_cast(widget)) { + dbg << "widgetItem(" << dockWidget << ")"; + } else if (auto *groupWindow = qobject_cast(widget)) { + dbg << "widgetItem(" << groupWindow << "->(" << groupWindow->dockWidgets() << "))"; + } else { + dbg << "widgetItem(" << widget << ")"; + } } else if (item.subinfo) { dbg << "subInfo(" << item.subinfo << "->(" << item.subinfo->item_list << ")"; } else if (item.placeHolderItem) { diff --git a/src/widgets/widgets/qdockarealayout_p.h b/src/widgets/widgets/qdockarealayout_p.h index 4a5e8901504..7f89a09b58b 100644 --- a/src/widgets/widgets/qdockarealayout_p.h +++ b/src/widgets/widgets/qdockarealayout_p.h @@ -75,6 +75,7 @@ struct Q_AUTOTEST_EXPORT QDockAreaLayoutItem uint flags; #ifndef QT_NO_DEBUG_STREAM friend Q_AUTOTEST_EXPORT QDebug operator<<(QDebug dbg, const QDockAreaLayoutItem &item); + friend Q_AUTOTEST_EXPORT QDebug operator<<(QDebug dbg, const QDockAreaLayoutItem *item); #endif }; diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp index 24cfbe4430e..89e696950fb 100644 --- a/src/widgets/widgets/qdockwidget.cpp +++ b/src/widgets/widgets/qdockwidget.cpp @@ -1816,6 +1816,27 @@ QWidget *QDockWidget::titleBarWidget() const return layout->widgetForRole(QDockWidgetLayout::TitleBar); } +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug dbg, const QDockWidget *dockWidget) +{ + QDebugStateSaver saver(dbg); + dbg.nospace(); + return dockWidget ? dbg << *dockWidget : dbg << "QDockWidget(0x0)"; +} + +QDebug operator<<(QDebug dbg, const QDockWidget &dockWidget) +{ + QDebugStateSaver saver(dbg); + dbg.nospace(); + dbg << "QDockWidget(" << static_cast(&dockWidget); + dbg << "->(ObjectName=" << dockWidget.objectName(); + dbg << "; floating=" << dockWidget.isFloating(); + dbg << "; features=" << dockWidget.features(); + dbg << ";))"; + return dbg; +} +#endif // QT_NO_DEBUG_STREAM + QT_END_NAMESPACE #include "qdockwidget.moc" diff --git a/src/widgets/widgets/qdockwidget.h b/src/widgets/widgets/qdockwidget.h index 8123bbb7298..ebd7ef27709 100644 --- a/src/widgets/widgets/qdockwidget.h +++ b/src/widgets/widgets/qdockwidget.h @@ -64,6 +64,11 @@ public: inline bool isAreaAllowed(Qt::DockWidgetArea area) const { return (allowedAreas() & area) == area; } +#ifndef QT_NO_DEBUG_STREAM + friend Q_AUTOTEST_EXPORT QDebug operator<<(QDebug dbg, const QDockWidget &dockWidget); + friend Q_AUTOTEST_EXPORT QDebug operator<<(QDebug dbg, const QDockWidget *dockWidget); +#endif + #ifndef QT_NO_ACTION QAction *toggleViewAction() const; #endif diff --git a/src/widgets/widgets/qmainwindowlayout_p.h b/src/widgets/widgets/qmainwindowlayout_p.h index d2891ab2280..e554d2b30e4 100644 --- a/src/widgets/widgets/qmainwindowlayout_p.h +++ b/src/widgets/widgets/qmainwindowlayout_p.h @@ -324,6 +324,7 @@ public: void updateCurrentGapRect(); void restore(); void apply(); + QList dockWidgets() const { return findChildren(); } QRect currentGapRect; QList currentGapPos;