Qt QML状态更改对GUI没有影响

时间:2013-11-27 10:45:44

标签: qt button signals qml state

我遇到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

1 个答案:

答案 0 :(得分:1)

从给出的示例中,看起来您正在更改模型的filestate属性而不是委托的state。见这一行:

gameListModel.setProperty( i, "filestate", "downloading")

你有GameElem.state绑定到GameElem.downloadState吗?它不在提供的代码中。目前尚不清楚你所拥有的组成部分......