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
242f8ef985
commit
aba4da8a0e
@ -1355,6 +1355,11 @@ QRect QLayout::alignmentRect(const QRect &r) const
|
|||||||
*/
|
*/
|
||||||
void QLayout::removeWidget(QWidget *widget)
|
void QLayout::removeWidget(QWidget *widget)
|
||||||
{
|
{
|
||||||
|
if (Q_UNLIKELY(!widget)) {
|
||||||
|
qWarning("QLayout::removeWidget: Cannot remove a null widget.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
QLayoutItem *child;
|
QLayoutItem *child;
|
||||||
while ((child = itemAt(i))) {
|
while ((child = itemAt(i))) {
|
||||||
|
@ -69,6 +69,7 @@ private slots:
|
|||||||
void controlTypes2();
|
void controlTypes2();
|
||||||
void adjustSizeShouldMakeSureLayoutIsActivated();
|
void adjustSizeShouldMakeSureLayoutIsActivated();
|
||||||
void testRetainSizeWhenHidden();
|
void testRetainSizeWhenHidden();
|
||||||
|
void removeWidget();
|
||||||
};
|
};
|
||||||
|
|
||||||
tst_QLayout::tst_QLayout()
|
tst_QLayout::tst_QLayout()
|
||||||
@ -381,5 +382,28 @@ void tst_QLayout::testRetainSizeWhenHidden()
|
|||||||
QCOMPARE(widget.sizeHint().height(), normalHeight);
|
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)
|
QTEST_MAIN(tst_QLayout)
|
||||||
#include "tst_qlayout.moc"
|
#include "tst_qlayout.moc"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user