我有一个以下对象的可视树:
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
}
}
}
图标的比例取决于当前对象是选中还是展开。扩展会导致对象绘制其子对象。但是,在收缩后重新扩展时,根据树结构,子对象缺少其文本,当选择或创建另一个对象时,这些文本会神秘地重新出现。选择另一个对象可能会导致出现一个,几个或所有缺失的文本,创建另一个对象也是如此。当树被扩展时,文本会在那里瞬间消失,之后它们就会消失。
我做了一些观察:
activefactor
和expandfactor
属性来细分绑定表达式,并将缩放绑定减少到activefactor * expandfactor
无效,问题仍然存在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就不会显现出来。如果列包装在与列相同宽度的矩形内,但只与小文本一样高,这只会导致大文本丢失:
这使我更加担心这是场景图中的一个错误,并将其包装在一个矩形中会强制渲染器只更新丢失文本的那部分。请注意,矩形不会剪切列。此外,如果矩形颜色设置为#00000000,即完全透明,则文本再次丢失,场景图形忽略它,因此没有任何东西可以强制更新文本部分。正如预期的那样,在没有列的情况下,在Item
中包装也没有帮助,也没有直接使用文本。如果矩形向下延伸,则会切割大文本,因此,只有大文本的上半部分可见。即使矩形为99.99%不透明,即使矩形中最微小的透明度也会导致文本丢失。只有100%不透明的矩形会强制文本的可见性。
我在Windows 7 x64(库存x86 qt build + custom x64 opengl static)和linux x64(使用mesa驱动程序)上测试了最新的Qt 5.7。