2017-02-17 113 views
0

我想在QML中將ListModel的內容繪製到畫布。此模型的內容顯示在應用程序中其他位置的ListView中,因此我知道該模型正確填充了內容。通過模型迭代QML

不,我想每一次更新畫布模型數據的變化:

import QtQuick 2.7 
import QtQml.Models 2.2 

Item { 
    Canvas { 
     anchors.fill: parent 
     id: canvas 

     onPaint: { 
      console.log("onPaint()") 
      var ctx = getContext("2d") 
      ctx.fillStyle = Qt.rgba(0, 0, 0, 1) 
      ctx.fillRect(0, 0, width, height) 

      console.log(particleListModel.count) 
      for(var i = 0; i < particleListModel.count; i++) { 
       console.log(i) 
      } 
     } 
    } 

    Connections { 
     target: particleListModel 

     onDataChanged: { 
      console.log("data changed") 
      canvas.requestPaint() 
     } 
    } 
} 

有一次,我改變了數據(C++),我收到了dataChanged()信號和畫布的onPaint()被調用。然而,調試輸出

console.log(particleListModel.count) 

是「未定義」。

這是怎麼回事,而普通的ListView能夠正確顯示內容?

+1

你不應該用 「rowCount時」 而不是 「數」? –

+0

謝謝!調用行計數作爲函數'rowCount()'解決了它。 –

回答

1

使用該模型時,您需要調用rowCount函數而不是count,因爲後者是ListView的屬性,而不是模型的屬性。

下面應該工作:

console.log(particleListModel.rowCount())