diff options
Diffstat (limited to 'src/quicktemplates/qquickbuttongroup.cpp')
-rw-r--r-- | src/quicktemplates/qquickbuttongroup.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/quicktemplates/qquickbuttongroup.cpp b/src/quicktemplates/qquickbuttongroup.cpp index 89a64720dc..d57b82c8e7 100644 --- a/src/quicktemplates/qquickbuttongroup.cpp +++ b/src/quicktemplates/qquickbuttongroup.cpp @@ -143,9 +143,15 @@ public: void QQuickButtonGroupPrivate::clear() { for (QQuickAbstractButton *button : std::as_const(buttons)) { - QQuickAbstractButtonPrivate::get(button)->group = nullptr; - QObjectPrivate::disconnect(button, &QQuickAbstractButton::clicked, this, &QQuickButtonGroupPrivate::buttonClicked); - QObjectPrivate::disconnect(button, &QQuickAbstractButton::checkedChanged, this, &QQuickButtonGroupPrivate::_q_updateCurrent); + auto *attached = qobject_cast<QQuickButtonGroupAttached *>( + qmlAttachedPropertiesObject<QQuickButtonGroup>(button, false)); + if (attached) { + attached->setGroup(nullptr); + } else { + QQuickAbstractButtonPrivate::get(button)->group = nullptr; + QObjectPrivate::disconnect(button, &QQuickAbstractButton::clicked, this, &QQuickButtonGroupPrivate::buttonClicked); + QObjectPrivate::disconnect(button, &QQuickAbstractButton::checkedChanged, this, &QQuickButtonGroupPrivate::_q_updateCurrent); + } } buttons.clear(); } @@ -500,11 +506,12 @@ void QQuickButtonGroupAttached::setGroup(QQuickButtonGroup *group) if (d->group == group) return; + auto *button = qobject_cast<QQuickAbstractButton *>(parent()); if (d->group) - d->group->removeButton(qobject_cast<QQuickAbstractButton*>(parent())); + d->group->removeButton(button); d->group = group; if (group) - group->addButton(qobject_cast<QQuickAbstractButton*>(parent())); + group->addButton(button); emit groupChanged(); } |