Fixed crash taking null central widget

When no central widget has been set, calling takeCentralWidget should
just return a null pointer instead of crashing.

[ChangeLog][QtWidgets][QMainWindow] Fixed crash using takeCentralWidget when
the central widget was not set.

Task-number: QTBUG-56628
Change-Id: I240ccf4caa41d2716a78851571fbfbf444a4922e
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
This commit is contained in:
André Somers 2016-10-25 16:27:58 +02:00 committed by Andre Somers
parent dbf35d7571
commit 4c00246fea
2 changed files with 8 additions and 2 deletions

View File

@ -664,8 +664,10 @@ QWidget *QMainWindow::takeCentralWidget()
{
Q_D(QMainWindow);
QWidget *oldcentralwidget = d->layout->centralWidget();
oldcentralwidget->setParent(0);
d->layout->setCentralWidget(0);
if (oldcentralwidget) {
oldcentralwidget->setParent(0);
d->layout->setCentralWidget(0);
}
return oldcentralwidget;
}

View File

@ -864,6 +864,10 @@ void tst_QMainWindow::takeCentralWidget() {
QVERIFY(!mw.centralWidget());
// verify that we don't crash when trying to take a non-set
// central widget but just return a null pointer instead
QVERIFY(!mw.takeCentralWidget());
mw.setCentralWidget(w1);
QWidget *oldCentralWidget = mw.takeCentralWidget();