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」とすることで、オブジェクト型のプロパティを作成することも可能です。