2017-02-17 10 views
0

ListModelのコンテンツをQMLのキャンバスに描画しようとしています。このモデルのコンテンツは、アプリケーションの別の場所で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

countの代わりにrowCount関数を呼び出す必要があります。後者はListViewのプロパティであり、モデルではないためです。

動作するはずです以下:

console.log(particleListModel.rowCount())