在 QML 中使用 Text.implicitWidth 时的性能损失
Posted
技术标签:
【中文标题】在 QML 中使用 Text.implicitWidth 时的性能损失【英文标题】:Performance Penalty when using Text.implicitWidth in QML 【发布时间】:2016-12-19 14:40:05 【问题描述】:在Item
的文档中可以找到:
注意:使用 Text 或 TextEdit 的implicitWidth 并显式设置宽度会导致性能损失,因为文本必须布局两次。
所以我不应该这样写:
Text
width: implicitWidth
text: 'my text defines the width'
这意味着,如果我不通过其他方式设置宽度,我将无法有意义地锚定到 Text
。
我想知道同样的性能损失是否适用于这种结构:
Item
id: myAnchorableTextBoundingBox
width: myText.implicitWidth
height: myText.implicitHeight
Text
id: myText
text: 'my text defines the width'
或者这是这个用例的一个可能的解决方法?
它甚至允许我像这样省略最大宽度:
Rectangle
color: 'transparent'
border.color: 'red'
width: myText.width + 2
height: myText.height + 2
Rectangle
id: myAnchorableTextBoundingBox
y: 1
x: 1
border.color: 'black'
width: myText.truncated ? myText.width : myText.implicitWidth
height: myText.implicitHeight
Text
id: myText
text: 'my text defines the width until it elides, then the width is used as limit'
elide: Text.ElideRight
width: 200
我会立即建立一个Component
,如果我可以肯定的话,不会有(太大的)惩罚。
【问题讨论】:
【参考方案1】:此解决方法应该可以正常工作。正如文档所述,性能损失只是设置宽度时的一个问题:
使用implicitWidth [...] 并显式设置宽度会导致性能损失
在这种情况下,您只是读取implicitWidth
属性,而不是设置Text
元素的width
,因此警告不适用。
【讨论】:
以上是关于在 QML 中使用 Text.implicitWidth 时的性能损失的主要内容,如果未能解决你的问题,请参考以下文章