Qt 5.11.2あたりの情報です。
qmlの配列が期待通りにバインドしない
下記のように、配列の要素を使ってxを記述するとします。
配列の要素を書き換えても、バインドが期待通りに動きません。
property var data: [0, 1, 2, 3, 4, 5]
x: data[2] //バインドしない
function setData2() {
data[2] = 6
}
どうやら、xはdataとバインドされていますが、data[2]とはバインドされていないようです。
そこで、下記のようにすると期待通りの動作をします。
function setData2() {
data[2] = 6
dataChanged() //直接シグナルを読んで、無理矢理更新させる。
//するとxは6になり、めでたしめでたし。
}
配列でバインディングをしたくて、なんとか考え出した方法です。
これが正しいやり方なのかどうかは、正直わかりません。
他に良い方法があれば、誰か教えてください。
リードオンリーのプロパティ
リードオンリーのプロパティを作ることができます。
readonly property int test: 10
readonly property int taste: test * 10 //バインドも効く
関数でバインディング
下記のように書けば、関数でバインディングできます。
(Qt Documentationより抜粋)
Rectangle {
width: 100
height: width * 2
focus: true
Keys.onSpacePressed: {
height = Qt.binding(function() { return width * 3 })
}
}