演示:
Window {
visible: true
width: 640
height: 480
Component.onCompleted: {
test.visible = true // 1. Show rect
for(var i = 0; i < 5000000000; i++){var t = i * i} // 2. Slow process, Sleep here
}
Rectangle {
id: test
color: "red"
width: 100; height: 100
visible: false
}
}
函数完成后,visible属性起作用。在演示中,test
之后的1.
矩形无法显示,必须等到函数完成。
我知道它应该由流程块渲染引起。但是有解决这个问题的技巧吗?
答案 0 :(得分:2)
繁重的任务不应在GUI线程中执行,而应在另一个线程中执行,以免它们被阻塞。 QML提供给WorkerScript,这使您可以在另一个线程中执行任务:
slow_process.js
WorkerScript.onMessage = function() {
for(var i = 0; i < 5000000000; i++){
var t = i * i
console.log(t)
}
}
main.qml
import QtQuick 2.9
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
Component.onCompleted: {
test.visible = true // 1. Show rect
ws.sendMessage()
}
WorkerScript {
id: ws
source: "slow_process.js"
}
Rectangle {
id: test
color: "red"
width: 100; height: 100
visible: false
}
}