From 7c9a54907f44b7e30ceac1975edcfa7920ffafd8 Mon Sep 17 00:00:00 2001 From: Kai Uwe Broulik Date: Thu, 23 Apr 2020 08:53:38 +0200 Subject: qquickitemgrabresult: Check effective window for visibility When using QQuickWidget, the quick scene is in an offscreen window which isn't visible, so grabToImage would always abort with "item's window is not visible". Checking the render window for the item fixes that. Task-number: QTBUG-55879 Change-Id: I58153e02e78623ba4ea6e7beec18a7503de7feeb Reviewed-by: Laszlo Agocs --- src/quick/items/qquickitemgrabresult.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/quick/items/qquickitemgrabresult.cpp') diff --git a/src/quick/items/qquickitemgrabresult.cpp b/src/quick/items/qquickitemgrabresult.cpp index 00e84536e9..41e9b2fe90 100644 --- a/src/quick/items/qquickitemgrabresult.cpp +++ b/src/quick/items/qquickitemgrabresult.cpp @@ -40,6 +40,7 @@ #include #include "qquickitemgrabresult.h" +#include "qquickrendercontrol.h" #include "qquickwindow.h" #include "qquickitem.h" #if QT_CONFIG(quick_shadereffect) @@ -293,7 +294,11 @@ QQuickItemGrabResult *QQuickItemGrabResultPrivate::create(QQuickItem *item, cons return nullptr; } - if (!item->window()->isVisible()) { + QWindow *effectiveWindow = item->window(); + if (QWindow *renderWindow = QQuickRenderControl::renderWindowFor(item->window())) + effectiveWindow = renderWindow; + + if (!effectiveWindow->isVisible()) { qmlWarning(item) << "grabToImage: item's window is not visible"; return nullptr; } -- cgit v1.2.3