当使用ShaderEffectSource作为另一个尚未显示的qml元素的预览时,当sourceItem的子元素设置为可见时,渲染不会刷新。
在示例中,按下切换按钮,文本不会出现在预览中,直到sourceItem可见。另一方面,将sourceItems子设置为不可见会立即刷新ShaderEffectSource。
小工作示例main.qml:
import QtQuick 2.5
import QtQuick.Extras 1.4
Item {
id: main
visible: true
width: 800
height: 600
Rectangle {
id: preview
width: 533
height: 400
// Preview render
ShaderEffectSource {
anchors.fill: parent
anchors.margins: 25
sourceItem: liveView
}
// Click on preview
MouseArea {
anchors.fill: parent
onClicked: {
liveView.visible = true;
preview.visible = false;
}
}
}
Rectangle {
id: liveView
visible: false
anchors.fill: parent
border.width: 2
border.color: "black"
Text {
id: liveText
visible: false
color: "black"
text: "Live"
width: parent.width
font.pointSize: 60
}
MouseArea {
width: parent.width
height: parent.height
onClicked: {
liveView.visible = false;
preview.visible = true;
}
}
}
ToggleButton {
anchors.bottom: parent.bottom
anchors.right: parent.right
text: "liveText visible"
onClicked: {liveText.visible = checked;}
}
}
我是在https://bugreports.qt.io/browse/QTBUG-66301下提交的,但我希望有人可以协助我制定解决方法,或者告诉我是否完全错误地使用它。
编辑1:第一个解决方法是永远不要使sourceItem不可见,并用低z隐藏在其他对象后面。