qt - 如何应对 child 能见度的变化?

标签 qt qml qquickitem

我有不同的容器项目,当它们的所有子项都不可见时,我想使其不可见。

动态地,某些代码会递归地解析所有项目,并根据某些过滤器(如搜索输入)将它们设置为可见或不可见。此过滤将忽略容器项目。

过滤后,我如何检测可见性已更改并相应地更新我的容器项目?

到目前为止,我已经有了这段代码,但我需要在每次更改子级可见性时执行此代码:

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/

相关文章:

c++ - 是否可以在 QStyledItemDelegate 中为 QIcon 的不透明度设置动画?

c++ - 在 Ubuntu QT 上构建时出现 'QMetaObject::connectSlotsByName: No matching signal for' 错误

qt - 从 Qt 5.3 代码中的任何位置获取 QML 根对象

c++ - 如何禁用 QQuickItem 的更新

c++ - 计算Qt中对象的序列化大小

python - 在主窗口上使用 QProcessAnimation

qt - 如何在委托(delegate)中对齐 QML 组件

c++ - 来自文件的 QML TableView

qt - QQuickItem::mapToItem 返回类型是什么?