我有一个以下对象的可视化树:

Row {
  spacing: 4
  y: 1
  U_Icon {
    width: 48
    height: 48
    scale: (activeo === main.object ? 1.18 : 1) * (main.expand ? 1 : 0.75)
    Behavior on scale { SpringAnimation { spring: 10; damping: 0.2; duration: 100 } }
    color: activeo == object ? "white" : "#262626"
    anchors.verticalCenter: parent.verticalCenter
  }
  Column {
    spacing: -10
    Text {
      text: object.type + "type"
      font.pointSize: 10
      font.family: sysfont
    }
    Text {
      text: "name"
      font.pointSize: 20
      font.family: sysfont
      font.italic: true
      font.letterSpacing: -1
    }
  }
}

图标的比例取决于是选择还是扩展当前对象 . 扩展使对象绘制其子对象 . 但是,在收缩后重新扩展时,根据树结构,子对象缺少其文本,当选择或创建另一个对象时,这些文本会神秘地重新出现 . 选择另一个对象可能会导致出现一个,几个或所有缺失的文本,创建另一个对象也是如此 . 当树被扩展时,文本会立即存在,之后它们就会消失 .

我做了一些观察:

  • 如果缩放的绑定只是两个表达式中的任何一个而没有另一个,则问题不会显现

  • 如果删除动画,则问题不会显现

  • 将图标比例作为行的别名属性进行接口,以便将绑定移出组件并将其移动到实例化的位置无效,问题仍然存在

  • 通过为每个表达式添加专用 activefactorexpandfactor 属性来分解绑定表达式并将缩放绑定减少到 activefactor * expandfactor 无效,问题仍然存在

  • 使用return语句将绑定表达式重构为代码块(有时在单行运行失败时有帮助)无效,问题仍然存在

以下是正在发生的事情的说明:
enter image description here

1 - the tree builds OK
2 - the tree is collapsed
3 - the tree is expanded again, the text flashes for a moment and disappears
4 - clicking arbitrary object causes all text to reappear

有什么想法正在发生什么?又一个错误或我错过了什么?为什么稍微复杂的表达式会导致带有文本的列消失?这不是特别是变化规模的问题,因为这两个表达都改变它并且两者都是自己工作的 .

请注意,文本仍然存在,只是没有被场景图渲染,这从浅灰色圆角矩形的大小可以看出,该矩形的大小与行宽相匹配 . 图标本身的比例被评估并显示属性,但由于某种原因导致文本消失 .

编辑:另一个奇怪的观察,如果文本列被一个普通的矩形替换,该错误不会显示 . 如果列包含在与列相同宽度的矩形内,但仅与小文本一样高,则只会导致大文本丢失:

enter image description here

这增加了我的怀疑,即这是场景图中的一个错误,并将其包装在一个矩形中会强制渲染器仅更新丢失文本的那部分 . 请注意,矩形不会剪切列 . 此外,如果矩形颜色设置为#00000000,即完全透明,则文本再次丢失,场景图形忽略它,因此没有任何东西可以强制更新文本部分 . 正如预期的那样,在没有列的情况下,包装 Item 也没有帮助,也没有直接使用文本 . 如果矩形向下延伸,则会切断大文本,因此只能看到大文本的上半部分 . 即使矩形为99.99%不透明,即使矩形中最微小的透明度也会导致文本丢失 . 只有100%不透明的矩形会强制文本的可见性 .

我在Windows 7 x64(库存x86 qt构建自定义x64 opengl静态)和linux x64(使用mesa驱动程序)上使用最新的Qt 5.7进行了测试 .