Do not remove non-widget items when removeWidget() called with nullptr
child->widget() returns null if the layout item is not a widget. Thus, calling removeWidget(nullptr) will remove all non-widget items such as layouts or strechers. Change-Id: I772c1158d0f7e8e2850b6e571b0405a2896f09b8 Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: David Faure <david.faure@kdab.com> (cherry picked from commit 867c0b8d8a53974074b1fff5b132f3ae9f150066) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
5ece368fa0
commit
5055a2fb99
@ -1320,6 +1320,11 @@ QRect QLayout::alignmentRect(const QRect &r) const
|
||||
*/
|
||||
void QLayout::removeWidget(QWidget *widget)
|
||||
{
|
||||
if (Q_UNLIKELY(!widget)) {
|
||||
qWarning("QLayout::removeWidget: Cannot remove a null widget.");
|
||||
return;
|
||||
}
|
||||
|
||||
int i = 0;
|
||||
QLayoutItem *child;
|
||||
while ((child = itemAt(i))) {
|
||||
|
@ -69,6 +69,7 @@ private slots:
|
||||
void controlTypes2();
|
||||
void adjustSizeShouldMakeSureLayoutIsActivated();
|
||||
void testRetainSizeWhenHidden();
|
||||
void removeWidget();
|
||||
};
|
||||
|
||||
tst_QLayout::tst_QLayout()
|
||||
@ -381,5 +382,28 @@ void tst_QLayout::testRetainSizeWhenHidden()
|
||||
QCOMPARE(widget.sizeHint().height(), normalHeight);
|
||||
}
|
||||
|
||||
void tst_QLayout::removeWidget()
|
||||
{
|
||||
QHBoxLayout layout;
|
||||
QCOMPARE(layout.count(), 0);
|
||||
QWidget w;
|
||||
layout.addWidget(&w);
|
||||
QCOMPARE(layout.count(), 1);
|
||||
layout.removeWidget(&w);
|
||||
QCOMPARE(layout.count(), 0);
|
||||
|
||||
QPointer<QLayout> childLayout(new QHBoxLayout);
|
||||
layout.addLayout(childLayout);
|
||||
QCOMPARE(layout.count(), 1);
|
||||
|
||||
layout.removeWidget(nullptr);
|
||||
QCOMPARE(layout.count(), 1);
|
||||
|
||||
layout.removeItem(childLayout);
|
||||
QCOMPARE(layout.count(), 0);
|
||||
|
||||
QVERIFY(!childLayout.isNull());
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_QLayout)
|
||||
#include "tst_qlayout.moc"
|
||||
|
Loading…
x
Reference in New Issue
Block a user