我有不同的容器项目,当它们的所有子项都不可见时,我想使其不可见。
动态地,某些代码会递归地解析所有项目,并根据某些过滤器(如搜索输入)将它们设置为可见或不可见。此过滤将忽略容器项目。
过滤后,我如何检测可见性已更改并相应地更新我的容器项目?
到目前为止,我已经有了这段代码,但我需要在每次更改子级可见性时执行此代码:
visible: visibleChildren.size > 0
最佳答案
试试这个:
visible: visibleChildren.length > 0
事实上,只有 visible:visibleChildren.length
也可以。
visibleChildren.size
是未定义
- 没有size
成员。
请记住,根据以下代码的行为判断,将项目设置回可见状态时会遇到问题:
MouseArea {
anchors.fill: parent
onClicked: inner.visible = !inner.visible
}
Rectangle {
id: outer
anchors.fill: parent
color: "blue"
visible: visibleChildren.length
Rectangle {
id: inner
width: 50
height: 50
color: "red"
}
}
一旦父项变得不可见,内部项的可见性始终为 false,即使显式设置为 true。
发生的情况是,如果父级不可见,则子级无法设置为可见,因此一旦 visibleChildren
为空,就无法通过将子级设置为可见来将其填充回来。当父级不可见时,不能将子级设置为可见,如果没有可见的子级,则父级也不可见。
因此,如果您需要这种行为,则必须实现其他一些可见性跟踪机制,而不是使用 visibleChildren
。
关于qt - 如何应对 child 能见度的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48682861/