QProgressDialog: fix setBar() not properly adopting the new QProgressBar

The "adoption" code is taken from setLabel().

Task-number: QTBUG-40503
Change-Id: Id512b28eb756b4a80e5701e599e2cbdf5346ff62
Reviewed-by: David Faure <david.faure@kdab.com>
This commit is contained in:
Marc Mutz 2014-07-29 23:51:45 +02:00
parent 53b781cb12
commit 18bb58a5a6
2 changed files with 8 additions and 7 deletions

View File

@ -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();
}

View File

@ -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