From 086897a1ae8e8d5bb1c1c1c18375eacba9ec97a4 Mon Sep 17 00:00:00 2001 From: Chris Lerner Date: Wed, 21 Feb 2024 15:04:43 +0100 Subject: [PATCH] tst_QWidget::realFocusChain: don't remove from iterated QList The method removed from QWidgetList widgets in a ranged for loop. That caused items being skipped. Create a new list by adding positives, instead of removing negatives from the original. This amends b1802a164b8682ed9e8956a5a19a90ade65c25d0. Pick-to: 6.7 6.6 Change-Id: I3f329290187ddc76169ababe8ffa6059d953212d Reviewed-by: Volker Hilsheimer --- tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index 04ff648ea9..2151d13085 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -2172,13 +2172,14 @@ QWidgetList expectedFocusChain(const QList &boxes, const QList QWidgetList realFocusChain(const QList &boxes, const QList &sequence) { - QWidgetList widgets = getFocusChain(boxes.at(sequence.at(0)), true); + const QWidgetList all = getFocusChain(boxes.at(sequence.at(0)), true); + QWidgetList chain; // Filter everything with NoFocus - for (auto *widget : widgets) { - if (widget->focusPolicy() == Qt::NoFocus) - widgets.removeOne(widget); + for (auto *widget : all) { + if (widget->focusPolicy() != Qt::NoFocus) + chain << widget; } - return widgets; + return chain; } void setTabOrder(const QList &boxes, const QList &sequence)