summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/kernel/qlayout.cpp5
-rw-r--r--tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp24
2 files changed, 29 insertions, 0 deletions
diff --git a/src/widgets/kernel/qlayout.cpp b/src/widgets/kernel/qlayout.cpp
index db7aa1aaeb..05e3a97ed3 100644
--- a/src/widgets/kernel/qlayout.cpp
+++ b/src/widgets/kernel/qlayout.cpp
@@ -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))) {
diff --git a/tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp b/tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp
index dec332196b..d54fcc5420 100644
--- a/tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp
+++ b/tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp
@@ -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"