Qt 5 の未来は明るいブログ

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

Published: 2013-04-29 / Last modified: 2013-04-29

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