绑定表达式+动画会导致对象消失并随机重新出现

时间:2016-09-11 13:49:00

标签: qt binding expression qml

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

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

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

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

编辑:另一个好奇的观察,如果文本列被一个普通的矩形替换,那么这个bug就不会显现出来。如果列包装在与列相同宽度的矩形内,但只与小文本一样高,这只会导致大文本丢失:

enter image description here

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

我在Windows 7 x64(库存x86 qt build + custom x64 opengl static)和linux x64(使用mesa驱动程序)上测试了最新的Qt 5.7。

0 个答案:

没有答案