tst_QLayout: fix memleak in removeWidget()

A QLayout that was removeItem()ed from its parent layout no longer is
deleted by it and has to be deleted manually, which the test function
failed to do.

To maintain the rest of the test function as faithfully as possible,
don't delete the layout right after the removeItem(), but delay until
the exit from the test function, using unique_ptr.

Amends 867c0b8d8a53974074b1fff5b132f3ae9f150066.

Pick-to: 6.8 6.5 5.15
Change-Id: Ia915d29bda348849033a6b9eb282dcb26a68c383
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
(cherry picked from commit 20d5a3cda94e474245351542eeac526a0f759a02)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Marc Mutz 2025-03-26 16:47:26 +01:00 committed by Qt Cherry-pick Bot
parent 3518bb1d28
commit fc16260be6

View File

@ -22,6 +22,8 @@
#include <QtTest/private/qtesthelpers_p.h>
#include <QtCore/qscopeguard.h>
using namespace QTestPrivate;
class tst_QLayout : public QObject
@ -392,6 +394,7 @@ void tst_QLayout::removeWidget()
QCOMPARE(layout.count(), 1);
layout.removeItem(childLayout);
const auto reaper = qScopeGuard([&] { delete childLayout; });
QCOMPARE(layout.count(), 0);
QVERIFY(!childLayout.isNull());