我注意到在QML中创建Text元素需要很长时间 举个例子:
import QtQuick 2.5
import QtQuick.Window 2.2
Window {
visible: true
width: 320
height: 640
color: "yellow"
ListView {
anchors.fill: parent
model: 1000
delegate: Component {
Rectangle {
width: parent.width
height: 50
color: index % 2 == 0 ? "#eee" : "#ddd"
Text {
anchors.fill: parent
font { family: "Helvetica"; pixelSize: 15 }
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
text: "9"
}
}
}
}
}
在QML Profiler中,这是结果:
Location Type Time in Percent Total Time Calls Mean Time Median Time Longest Time Shortest Time Details
<program> 100.00 % 730.664 ms 1 730.664 ms 730.664 ms 730.664 ms 730.664 ms Main Program
main.qml:17 Create 82.33 % 601.544 ms 706 852.045 µs 46.227 µs 536.645 ms 7.777 µs QtQuick/Text
main.qml:9 Create 76.37 % 557.974 ms 2 278.987 ms 557.793 ms 557.793 ms 181.747 µs QtQuick/ListView
main.qml:4 Create 15.04 % 109.901 ms 2 54.951 ms 109.520 ms 109.520 ms 380.668 µs QtQuick.Window/Window
main.qml:13 Create 4.90 % 35.826 ms 706 50.744 µs 14.842 µs 20.833 ms 0.438 µs QtQuick/Rectangle
main.qml:18 Binding 0.74 % 5.397 ms 353 15.288 µs 15.704 µs 86.770 µs 4.841 µs anchors.fill: parent
main.qml:16 Binding 0.58 % 4.224 ms 353 11.964 µs 11.686 µs 171.614 µs 4.813 µs color: index % 2 == 0 ? "#eee" : "#ddd"
main.qml:18 JavaScript 0.40 % 2.952 ms 353 8.361 µs 8.689 µs 22.030 µs 2.597 µs expression for fill
main.qml:16 JavaScript 0.32 % 2.351 ms 353 6.660 µs 6.289 µs 165.754 µs 2.598 µs expression for color
main.qml:14 Binding 0.26 % 1.870 ms 354 5.282 µs 5.301 µs 31.643 µs 2.261 µs width: parent.width
main.qml:14 JavaScript 0.19 % 1.419 ms 354 4.007 µs 4.066 µs 12.325 µs 1.591 µs expression for width
main.qml:1 Compile 0.10 % 759.314 µs 1 759.314 µs 759.314 µs 759.314 µs 759.314 µs main.qml
main.qml:10 Binding 0.01 % 41.470 µs 1 41.470 µs 41.470 µs 41.470 µs 41.470 µs anchors.fill: parent
main.qml:10 JavaScript 0.00 % 22.325 µs 1 22.325 µs 22.325 µs 22.325 µs 22.325 µs expression for fill
main.qml:12 Create 0.00 % 3.321 µs 1 3.321 µs 3.321 µs 3.321 µs 3.321 µs <component>
如您所见,创建Text元素需要很长时间 在另一个带有一些Text in delegate的项目中,这就是结果:
Location Type Time in Percent Total Time Calls Mean Time Median Time Longest Time Shortest Time Details
PostLikeAndMark.qml:41 Create 79.20 % 1.261 s 46 27.406 ms 60.427 µs 1.257 s 7.124 µs QtQuick/Text
有没有解决这个问题的方法?
更新
在某些情况下,似乎这个问题可能与字体系列有关。
对于最近的一个新项目,我发现使用某些字体系列会引入这个问题。 (Segue UI
)
将字体系列更改为某些其他字体(例如Myriad Pro
)可以解决问题。