QML迭代模型

时间:2017-02-17 13:48:12

标签: qml qt5 qtquick2

我正在尝试将ListModel的内容绘制到QML中的画布。此模型的内容显示在应用程序中其他位置的ListView中,因此我知道模型已正确填充内容。

不,我每次模型数据更改时都尝试更新画布:

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 :(得分:1)

使用模型时,您需要调用rowCount函数而不是count,因为后者是ListView的属性,而不是模型的属性。

以下内容应该有效:

console.log(particleListModel.rowCount())