Details
-
Bug
-
Resolution: Unresolved
-
P2: Important
-
None
-
5.15.5
-
None
Description
Moving an item containing a ColorOverlay, from window to another results in:
QQuickItem: Cannot use same item on different windows at the same time.
In more complex examples I can also see
Updates can only be scheduled from GUI thread or from QQuickItem::updatePaintNode()
==89057==ERROR: AddressSanitizer: SEGV on unknown address 0x000075000111 (pc 0x7f00b62207e1 bp 0x7f00924008c0 sp 0x7f0092400890 T6) ==89057==The signal is caused by a READ memory access. #0 0x7f00b62207e1 in QSGOpenGLLayer::grab() scenegraph/qsgopengllayer.cpp:316 #1 0x7f00b6220954 in QSGOpenGLLayer::updateTexture() scenegraph/qsgopengllayer.cpp:187 #2 0x7f00b636dc05 in QQuickOpenGLShaderEffectMaterial::updateTextures() const items/qquickopenglshadereffectnode.cpp:474 #3 0x7f00b61aef07 in QSGRenderer::preprocess() scenegraph/coreapi/qsgrenderer.cpp:337 #4 0x7f00b61ae7c2 in QSGRenderer::renderScene(QSGBindable const&) scenegraph/coreapi/qsgrenderer.cpp:238 #5 0x7f00b61aece6 in QSGRenderer::renderScene(unsigned int) scenegraph/coreapi/qsgrenderer.cpp:212 #6 0x7f00b6218470 in QSGDefaultRenderContext::renderNextFrame(QSGRenderer*, unsigned int) scenegraph/qsgdefaultrendercontext.cpp:228 #7 0x7f00b627bcf8 in QQuickWindowPrivate::renderSceneGraph(QSize const&, QSize const&) items/qquickwindow.cpp:617 #8 0x7f00b62259ae in QSGRenderThread::syncAndRender(QImage*) scenegraph/qsgthreadedrenderloop.cpp:837 #9 0x7f00b622985a in QSGRenderThread::run() scenegraph/qsgthreadedrenderloop.cpp:1043 #10 0x7f00b40feb34 in QThreadPrivate::start(void*) thread/qthread_unix.cpp:329 #11 0x7f00b316a258 in start_thread (/usr/lib/../lib/libpthread.so.0+0x9258) #12 0x7f00b32945e2 in __GI___clone (/usr/lib/libc.so.6+0xfe5e2)
Example:
import QtQuick 2.12 import QtQuick.Window 2.15 import QtGraphicalEffects 1.15 Item { Window { id: window1 visible: true Rectangle { id: root1 color: "blue" anchors.fill: parent } } Window { id: window2 visible: true Rectangle { id: root2 color: "red" anchors.fill: parent Rectangle { id: itemToMove anchors.fill: parent MouseArea { anchors.fill: parent onClicked: { console.log("Clicked"); if (itemToMove.parent == root2) { itemToMove.parent = root1; } else { itemToMove.parent = root2; } } Rectangle { id: rectangle width: 100 height: 100 anchors.verticalCenter: parent.verticalCenter ColorOverlay { visible: true anchors.fill: rectangle source: rectangle color: "#FFFFFF" } } Text { text: "click me" anchors.fill: parent } } } } } }