2017-02-17 74 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())