QML のプロパティで配列を扱う際の注意点

QML(Qt)でプロパティで「variant」に保存された配列などは更新できない。 で解説されているとおり、variant 型のプロパティに配列やオブジェクトを指定した場合、それを操作することはできませんでした。

Qt Quick 2.0 で導入された var 型のプロパティを使用すると、プロパティに指定した配列やオブジェクトを操作することができるようになりました。

import QtQuick 2.0

Item {
    id: root
    width: 360
    height: 360

    property var array: new Array

    Row {
        Text {
            id: text1
            width: root.width / 2
            text: array.join('\n') // バインディングは動作しません!
        }
        Text {
            id: text2
            width: root.width / 2
        }
    }

    Timer {
        interval: 1000; running: true; repeat: true
        onTriggered: {
            array.push(Qt.formatDateTime(new Date(), 'yyyy-MM-dd hh:mm:ss'))
            text2.text = array.join('\n')
        }
    }
}

Timer をもちいて1秒ごとに array プロパティに値を追加し、array の要素を改行で接続した文字列を text2 の text に代入しています。

text1 で行っているようなプロパティバインディングは(少なくとも現時点では)動作しません。


また、「new Array」の部分を「new Object」とすることで、オブジェクト型のプロパティを作成することも可能です。