tst_QSplitter: fix memleak in replaceWidgetWhileHidden()

QSplitter::replaceWidget() is decumented to un-parent and return the
original widget (the one that the newWidget) replaces, so the caller
of the function is responsible for deleting it, which the test
function neglected.

Fix by storing the returned object in a unique_ptr for delayed
deletion at the exit of the function. This is the minimally-invasive
change.

Amends fb56a0f2ce34e95d955095c01ecf2943046be85e.

Pick-to: 6.9 6.8 6.5
Change-Id: Ia63ebfde59b1c5ef8ddb6c3f3ab10b28d5bf6cff
Reviewed-by: Axel Spoerl <axel.spoerl@qt.io>
This commit is contained in:
Marc Mutz 2025-03-27 09:34:11 +01:00
parent 75db2305cb
commit f9d9630e9e

View File

@ -861,7 +861,7 @@ void tst_QSplitter::replaceWidgetWhileHidden()
newWidget->hide();
const bool wasExplicitHide = !widgetVisible && newWidget->testAttribute(Qt::WA_WState_ExplicitShowHide);
splitter.replaceWidget(1, newWidget);
const std::unique_ptr<QWidget> reaper{splitter.replaceWidget(1, newWidget)};
QCOMPARE(!widgetVisible && newWidget->testAttribute(Qt::WA_WState_ExplicitShowHide), wasExplicitHide);