2017-02-17 7 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

не следует использовать «сверку» вместо «подсчета»? –

+0

Спасибо! Вызов числа строк в качестве функции 'rowCount()' решил. –

ответ

1

При работе с моделью вам необходимо вызвать функцию rowCount вместо count, поскольку последняя является свойством ListView, а не модели.

Следующая должно работать:

console.log(particleListModel.rowCount()) 
Смежные вопросы