From bbeff2a3350dd3396400865525d509b784c2d93e Mon Sep 17 00:00:00 2001 From: Axel Spoerl Date: Tue, 7 Nov 2023 11:37:56 +0100 Subject: [PATCH] Extend qDebug functionality for QDockWidget Add features and floating flag to QDockWidget debugging. Debug dockwidget parents of a group window. Task-number: QTBUG-118578 Task-number: QTBUG-118579 Pick-to: 6.6 Change-Id: If2a6caacf5d02f9018c2a3073fdbc1de39bce1ee Reviewed-by: Santhosh Kumar Reviewed-by: Keith Kyzivat --- src/widgets/widgets/qdockarealayout.cpp | 16 +++++++++++++++- src/widgets/widgets/qdockarealayout_p.h | 1 + src/widgets/widgets/qdockwidget.cpp | 21 +++++++++++++++++++++ src/widgets/widgets/qdockwidget.h | 5 +++++ src/widgets/widgets/qmainwindowlayout_p.h | 1 + 5 files changed, 43 insertions(+), 1 deletion(-) 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 b2e13d1dc3c..7a33b397072 100644 --- a/src/widgets/widgets/qdockarealayout_p.h +++ b/src/widgets/widgets/qdockarealayout_p.h @@ -74,6 +74,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 2ba0c821d41..8453a309c82 100644 --- a/src/widgets/widgets/qdockwidget.cpp +++ b/src/widgets/widgets/qdockwidget.cpp @@ -1802,6 +1802,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 282f0b0038f..20c37f095d4 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 bd4790d77de..26acff5bcb5 100644 --- a/src/widgets/widgets/qmainwindowlayout_p.h +++ b/src/widgets/widgets/qmainwindowlayout_p.h @@ -326,6 +326,7 @@ public: void updateCurrentGapRect(); void restore(); void apply(); + QList dockWidgets() const { return findChildren(); } QRect currentGapRect; QList currentGapPos;