LoginSignup
0
0

More than 5 years have passed since last update.

QMLのプロパティバインディングについて

Last updated at Posted at 2019-05-06

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 })
    }
}
0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0