我遇到qml状态无效的问题。所以国家已成功改变,但国家改变应该改变的变化不会发生。我会详细解释一下情况:
我有一个ListView,包含几个“GameElem”:
ListView
id: gameList
Component{
id: gameDelegate
GameElem{
gameID: pid
gameName: name
gameSize: size
downloadProgress: progress
downloadSpeed: speed
downloadState: filestate
}
}
model: gameListModel
delegate: gameDelegate
}
我在课堂上发出信号并更改启用的按钮。因此,如果状态更改为“下载”,则应启用“停止下载”-Button。
onSignalNowDownloading: {
for( var i = 0; i < gameListModel.count ; i++)
{
if( gameListModel.get( i ).pid == gameID )
{
console.log( "Now downloading " + gameID )
console.log( gameListModel.get( i ).filestate + " here" ) //this line
gameListModel.setProperty( i, "filestate", "downloading")
console.log( gameListModel.get( i ).filestate + " here" ) //and this line
}
}
}
并且标记行中的日志是“在此处恢复”和“在此处下载”。所以状态改变成功但没有效果。
早些时候,我做了类似的事情,但没有状态。我正在改变进度条,这是正常的。 onSignalDownloadProgress: {
//update list data model to make the progress bar move
for( var i = 0; i < gameListModel.count ; i++)
{
if( gameListModel.get( i ).pid == gameID)
{
gameListModel.setProperty( i, "progress", received / total)
gameListModel.setProperty( i, "speed", speed)
gameListModel.setProperty( i, "progressText", progress)
}
}
}
这就是我的状态。只是隐藏或显示几个按钮。
states: [
State {
name: "downloading"
PropertyChanges {
target: myBtnDownload
visible:false
}
PropertyChanges {
target: myBtnStop
visible:true
}
PropertyChanges {
target: myProgressBar
visible:true
}
PropertyChanges {
target: myTextSpeed
visible: true
}
PropertyChanges {
target: myBtnRun
visible:false
}
PropertyChanges {
target: myBtnFolder
visible:false
}
},
State {
name: "resuming"
PropertyChanges {
target: myBtnDownload
visible:false
}
PropertyChanges {
target: myBtnStop
visible:true
}
PropertyChanges {
target: myProgressBar
visible:true
}
PropertyChanges {
target: myTextSpeed
visible: false
}
PropertyChanges {
target: myBtnRun
visible:false
}
PropertyChanges {
target: myBtnFolder
visible:false
}
PropertyChanges {
target: myBtnResume
text: "resuming"
visible:true
enabled: false
}
}
]
任何人都可以解释一下,为什么进度条成功更改而按钮(=状态)没有?也许我可以强迫任何重绘?
感谢您的帮助。
Testerrrr
答案 0 :(得分:1)
从给出的示例中,看起来您正在更改模型的filestate
属性而不是委托的state
。见这一行:
gameListModel.setProperty( i, "filestate", "downloading")
你有GameElem.state
绑定到GameElem.downloadState
吗?它不在提供的代码中。目前尚不清楚你所拥有的组成部分......