From dfa4ebc150dbb2bc062695a4bbb56ee4f8b5bff3 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.6 Change-Id: I3f329290187ddc76169ababe8ffa6059d953212d Reviewed-by: Volker Hilsheimer (cherry picked from commit 086897a1ae8e8d5bb1c1c1c18375eacba9ec97a4) Reviewed-by: Qt Cherry-pick Bot --- 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 e12323eddf0..f7a98e1ef6d 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -2171,13 +2171,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)