diff --git a/src/libs/utils/aspects.cpp b/src/libs/utils/aspects.cpp index 541b258c0bb..549a3942730 100644 --- a/src/libs/utils/aspects.cpp +++ b/src/libs/utils/aspects.cpp @@ -587,6 +587,7 @@ public: BoolAspect::LabelPlacement m_labelPlacement = BoolAspect::LabelPlacement::AtCheckBox; QPointer m_button; // Owned by configuration widget QPointer m_groupBox; // For BoolAspects handling GroupBox check boxes + bool m_buttonIsAdopted = false; }; class ColorAspectPrivate @@ -1446,8 +1447,10 @@ BoolAspect::~BoolAspect() = default; */ void BoolAspect::addToLayout(Layouting::LayoutItem &parent) { - QTC_CHECK(!d->m_button); - d->m_button = createSubWidget(); + if (!d->m_buttonIsAdopted) { + QTC_CHECK(!d->m_button); + d->m_button = createSubWidget(); + } switch (d->m_labelPlacement) { case LabelPlacement::AtCheckBoxWithoutDummyLabel: d->m_button->setText(labelText()); @@ -1474,6 +1477,15 @@ void BoolAspect::addToLayout(Layouting::LayoutItem &parent) this, &BoolAspect::volatileValueChanged); } +void BoolAspect::adoptButton(QAbstractButton *button) +{ + QTC_ASSERT(button, return); + QTC_CHECK(!d->m_button); + d->m_button = button; + d->m_buttonIsAdopted = true; + registerSubWidget(button); +} + std::function BoolAspect::groupChecker() { return [this](QObject *target) { diff --git a/src/libs/utils/aspects.h b/src/libs/utils/aspects.h index 1a2570ea837..f6a35fa4ef8 100644 --- a/src/libs/utils/aspects.h +++ b/src/libs/utils/aspects.h @@ -240,6 +240,8 @@ public: LabelPlacement labelPlacement = LabelPlacement::InExtraLabel); void setLabelPlacement(LabelPlacement labelPlacement); + void adoptButton(QAbstractButton *button); + signals: void valueChanged(bool newValue); void volatileValueChanged(bool newValue);