qml组件在剥离层后消失



我有一个sddm主题的组件。目前,我使用主题黑糖作为基本主题。组件如下所示:

Item {
id: hexagon
property color color:"yellow"
property int radius: 30
//layer.enabled: true
//layer.samples: 8
Shape {
//... Here some Positioning and other Stuff
ShapePath {
//... Here some Options and Pathlines
}
}
}

这很好,但只要我取消对两个layer设置的注释,组件就会消失。这种情况会发生吗,因为我加载的组件是这样的:

Pane {
...
Item {
...
MyComponent {
z: 1
}
}
}

窗格或项目也不使用layer,但项目中的大多数组件都使用z: 1属性。

正如iam_peter所说,任何项目的默认宽度和高度属性都是0,layer.enabled将屏幕外纹理的大小设置为项目大小。默认情况下,场景图不进行任何剪裁:子项可以填充父项边界之外的场景图节点。但是,当您将子对象的渲染限制在特定的屏幕外纹理时,任何不适合的内容都会被剪裁。这里有一个更具互动性的例子:

import QtQuick
import QtQuick.Controls
Rectangle {
width: 640
height: 480
Column {
CheckBox {
id: cbLE
text: "layer enabled"
}
Row {
spacing: 6
TextField {
id: widthField
text: layerItem.width
onEditingFinished: layerItem.width = text
}
Label {
text: "x"
anchors.verticalCenter: parent.verticalCenter
}
TextField {
id: heightField
text: layerItem.height
onEditingFinished: layerItem.height = text
}
}
}
Rectangle {
id: layerItem
x: 100; y: 100
border.color: "black"; border.width: 2
layer.enabled: cbLE.checked
Rectangle {
width: 100
height: 100
color: "tomato"
opacity: 0.5
}
Text {
text: "this text will get clipped even when layer size is defined"
}
}
}

您可以使用renderdoc来查看渲染是如何完成的;例如,您可以看到通过启用层创建的纹理。

这是一个可重复的小示例:

import QtQuick
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
Item {
//width: 200
//height: 200
//layer.enabled: true
Rectangle {
width: 100
height: 100
color: "red"
}
}
}

我怀疑,如果不在要启用层(layer.enabled: true(的Item上设置大小,它的大小将为0。因此,屏幕外缓冲区的大小为0。

顺便说一句,这在没有层的情况下有效,因为默认情况下Itemclip属性设置为false。因此,它不会剪裁到其父对象的边界。

最新更新