diff --git a/src/widgets/dialogs/qprogressdialog.cpp b/src/widgets/dialogs/qprogressdialog.cpp index 35a75adea2a..bcfdb03f2f8 100644 --- a/src/widgets/dialogs/qprogressdialog.cpp +++ b/src/widgets/dialogs/qprogressdialog.cpp @@ -505,9 +505,17 @@ void QProgressDialog::setBar(QProgressBar *bar) } delete d->bar; d->bar = bar; + if (bar) { + if (bar->parentWidget() == this) + bar->hide(); // until we resize + else + bar->setParent(this, 0); + } int w = qMax(isVisible() ? width() : 0, sizeHint().width()); int h = qMax(isVisible() ? height() : 0, sizeHint().height()); resize(w, h); + if (bar) + bar->show(); } diff --git a/tests/auto/widgets/dialogs/qprogressdialog/tst_qprogressdialog.cpp b/tests/auto/widgets/dialogs/qprogressdialog/tst_qprogressdialog.cpp index 86b9d7eee29..4e54c445b80 100644 --- a/tests/auto/widgets/dialogs/qprogressdialog/tst_qprogressdialog.cpp +++ b/tests/auto/widgets/dialogs/qprogressdialog/tst_qprogressdialog.cpp @@ -218,7 +218,6 @@ void tst_QProgressDialog::settingCustomWidgets() QVERIFY(!dlg.isAncestorOf(bar)); dlg.setBar(bar); - QEXPECT_FAIL("", "QProgressBar doesn't adopt custom progress bar as children", Continue); QVERIFY(dlg.isAncestorOf(bar)); QTest::ignoreMessage(QtWarningMsg, "QProgressDialog::setBar: Attempt to set the same progress bar again"); dlg.setBar(bar); // setting the same widget again should not crash @@ -227,13 +226,7 @@ void tst_QProgressDialog::settingCustomWidgets() QVERIFY(!l); QVERIFY(!btn); -#if 0 - QEXPECT_FAIL("", "QProgressBar doesn't clean up custom progress bars", Continue); QVERIFY(!bar); -#else - // make cleanup() pass - delete bar; -#endif } class QTestTranslator : public QTranslator