diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index da7fae2af8..11959688cb 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -10860,11 +10860,19 @@ void QWidget::setParent(QWidget *parent, Qt::WindowFlags f) if (q_evaluateRhiConfig(this, nullptr, &surfaceType)) { const bool wasUsingRhiFlush = newtlw->d_func()->usesRhiFlush; newtlw->d_func()->usesRhiFlush = true; + bool recreate = false; if (QWindow *w = newtlw->windowHandle()) { - if (w->surfaceType() != surfaceType || !wasUsingRhiFlush) { - newtlw->destroy(); - newtlw->create(); - } + if (w->surfaceType() != surfaceType || !wasUsingRhiFlush) + recreate = true; + } + // QTBUG-115652: Besides the toplevel the nativeParentWidget()'s QWindow must be checked as well. + if (QWindow *w = d->windowHandle(QWidgetPrivate::WindowHandleMode::Closest)) { + if (w->surfaceType() != surfaceType) + recreate = true; + } + if (recreate) { + newtlw->destroy(); + newtlw->create(); } } }