diff --git a/src/widgets/widgets/qbuttongroup.cpp b/src/widgets/widgets/qbuttongroup.cpp index 079ef45e907..db89b137b55 100644 --- a/src/widgets/widgets/qbuttongroup.cpp +++ b/src/widgets/widgets/qbuttongroup.cpp @@ -211,12 +211,11 @@ void QButtonGroup::addButton(QAbstractButton *button, int id) button->d_func()->group = this; d->buttonList.append(button); if (id == -1) { - const QHash::const_iterator it - = std::min_element(d->mapping.cbegin(), d->mapping.cend()); + const auto it = std::min_element(d->mapping.cbegin(), d->mapping.cend()); if (it == d->mapping.cend()) d->mapping[button] = -2; else - d->mapping[button] = *it - 1; + d->mapping[button] = (*it >= 0) ? -2 : (*it - 1); } else { d->mapping[button] = id; } diff --git a/tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp b/tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp index 566f4ed52ce..a1d27ed4a55 100644 --- a/tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp +++ b/tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp @@ -539,18 +539,18 @@ void tst_QButtonGroup::autoIncrementId() QRadioButton *radio3 = new QRadioButton(&dlg); radio3->setText("radio3"); - buttons->addButton(radio1); + buttons->addButton(radio1, 2); vbox->addWidget(radio1); - buttons->addButton(radio2); + buttons->addButton(radio2, -1); vbox->addWidget(radio2); buttons->addButton(radio3); vbox->addWidget(radio3); radio1->setChecked(true); - QCOMPARE(buttons->id(radio1), -2); - QCOMPARE(buttons->id(radio2), -3); - QCOMPARE(buttons->id(radio3), -4); + QCOMPARE(buttons->id(radio1), 2); + QCOMPARE(buttons->id(radio2), -2); + QCOMPARE(buttons->id(radio3), -3); dlg.show(); }