我使用Game.qml
加载Loader
组件,它运行正常。但是,onProgressChanged
广告位只会被调用一次 - 在流程结束时(progress
取值1
时)。
GameWindow {
...
Loader {
id: loader
onLoaded: if(item) splashScene.state = "hidden"
onProgressChanged: splashScene.progress = progress
}
SplashScene {
id: splashScene
state: "shown"
}
Timer {
id: lateInitializer
interval: 1000
onTriggered: loader.source = "Game.qml"
}
Component.onCompleted: lateInitializer.start()
}
有没有办法与Loader
或GameWindow
组件中的Game
合作?
MyScene {
id:scene
property alias progress: progressBar.progress
...
MyProgressBar {
id: progressBar
anchors {
horizontalCenter: parent.horizontalCenter
bottom: parent.bottom
bottomMargin: parent.height/3 - height/2
}
}
}
我没有使用任何特别的东西。我只想动画我的进度条。
答案 0 :(得分:1)
此属性保存从网络加载QML数据的进度,从0.0(未加载)到1.0(已完成)。大多数QML文件非常小,因此该值将从0快速变为1。
我补充说,如果文件是从本地磁盘加载的话,它的速度非常快,因此步调为0到1是完全正常的。
答案 1 :(得分:1)
您必须将asynchronous: true
属性添加到Loader
组件。这个属性允许你"听"关于状态变化。
http://doc.qt.io/qt-5/qml-qtquick-loader.html#asynchronous-prop
修改强> 您可以对状态更改做出如下反应:
Loader {
visible: status == Loader.Ready
}
因此,对于您的情况,您可以创建以下内容:
Loader {
id: loader
onStatusChanged: splashScene.progress = status
}
SplashScene {
id: splashScene
state: loader.status === Loader.Ready ? "shown" : undefined
}