diff options
-rw-r--r-- | src/widgets/widgets/qgroupbox.cpp | 2 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp | 19 |
2 files changed, 21 insertions, 0 deletions
diff --git a/src/widgets/widgets/qgroupbox.cpp b/src/widgets/widgets/qgroupbox.cpp index 168f0bbd67..42b0c68971 100644 --- a/src/widgets/widgets/qgroupbox.cpp +++ b/src/widgets/widgets/qgroupbox.cpp @@ -405,6 +405,8 @@ void QGroupBox::childEvent(QChildEvent *c) if (c->type() != QEvent::ChildAdded || !c->child()->isWidgetType()) return; QWidget *w = (QWidget*)c->child(); + if (w->isWindow()) + return; if (d->checkable) { if (d->checked) { if (!w->testAttribute(Qt::WA_ForceDisabled)) diff --git a/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp b/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp index a4d4e5d717..433fbc2bfe 100644 --- a/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp +++ b/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp @@ -46,6 +46,7 @@ #include <QStyleOptionGroupBox> #include <QVBoxLayout> #include <QRadioButton> +#include <QDialog> #include "qgroupbox.h" @@ -71,6 +72,7 @@ private slots: void setChecked_data(); void setChecked(); void enabledPropagation(); + void enabledChildPropagation(); void sizeHint(); void toggled(); void clicked_data(); @@ -288,6 +290,23 @@ void tst_QGroupBox::enabledPropagation() delete testWidget; } +void tst_QGroupBox::enabledChildPropagation() +{ + QGroupBox testWidget; + testWidget.setCheckable(true); + testWidget.setChecked(true); + // The value of isChecked() should be reflected in the isEnabled() of newly + // added child widgets, but not in top level widgets. + QWidget *childWidget = new QWidget(&testWidget); + QVERIFY(childWidget->isEnabled()); + QDialog *dialog = new QDialog(&testWidget); + QVERIFY(dialog->isEnabled()); + testWidget.setChecked(false); + childWidget = new QWidget(&testWidget); + QVERIFY(!childWidget->isEnabled()); + dialog = new QDialog(&testWidget); + QVERIFY(dialog->isEnabled()); +} void tst_QGroupBox::sizeHint() { |