我有一个以下对象的可视化树:
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
无效,问题仍然存在 -
使用return语句将绑定表达式重构为代码块(有时在单行运行失败时有帮助)无效,问题仍然存在
以下是正在发生的事情的说明:
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
有什么想法正在发生什么?又一个错误或我错过了什么?为什么稍微复杂的表达式会导致带有文本的列消失?这不是特别是变化规模的问题,因为这两个表达都改变它并且两者都是自己工作的 .
请注意,文本仍然存在,只是没有被场景图渲染,这从浅灰色圆角矩形的大小可以看出,该矩形的大小与行宽相匹配 . 图标本身的比例被评估并显示属性,但由于某种原因导致文本消失 .
编辑:另一个奇怪的观察,如果文本列被一个普通的矩形替换,该错误不会显示 . 如果列包含在与列相同宽度的矩形内,但仅与小文本一样高,则只会导致大文本丢失:
这增加了我的怀疑,即这是场景图中的一个错误,并将其包装在一个矩形中会强制渲染器仅更新丢失文本的那部分 . 请注意,矩形不会剪切列 . 此外,如果矩形颜色设置为#00000000,即完全透明,则文本再次丢失,场景图形忽略它,因此没有任何东西可以强制更新文本部分 . 正如预期的那样,在没有列的情况下,包装 Item
也没有帮助,也没有直接使用文本 . 如果矩形向下延伸,则会切断大文本,因此只能看到大文本的上半部分 . 即使矩形为99.99%不透明,即使矩形中最微小的透明度也会导致文本丢失 . 只有100%不透明的矩形会强制文本的可见性 .
我在Windows 7 x64(库存x86 qt构建自定义x64 opengl静态)和linux x64(使用mesa驱动程序)上使用最新的Qt 5.7进行了测试 .