14

oneと の 2 つのプロパティを持つカスタム QML コンポーネントを作成したいと考えtwoています。特に、 iftwoは に基づいて初期値を取得する必要がありますone。次のコード

Rectangle {
  property int one: 1
  property int two: 2 * one
}

ただし、プロパティ バインディングが作成されます。one変更されるたびtwoに、 の新しい値に更新されます2 * one。バインディングを作成せずtwoに のに初期化するにはどうすればよいですか?2 * one

4

4 に答える 4

4

バインディングする必要がないことを再確認し、コードを汚さないように注意してください。
次のように、すぐにプロパティに値を入力できます。

window {
    id: win
    width: 300; height: 450
    color: "#d8d8d8"
    Item {
        property int val1
        property int val2
        property int val3: parent.width    //<-- Binding
        Component.onCompleted: {
            val1 = win.width;    //<---|
            val2 = win.height;   //<---|=== There is no binding. Just changes value
            /* ... */
        }
    }
}

Component.onStatusChanged(よくわかりませんが、 and Component.Readystatus を使って初期値を設定できるかもしれません)

パフォーマンスに関する注意事項:シグナルおよび Javascript コードはパフォーマンスに影響を与えます。バインディングを使用する方がパフォーマンスが向上する場合があります。Profiler を使用して確認します。複数のプロパティの初期値を設定したい場合や、すでにonCompletedシグナルを使用している場合は、これでパフォーマンスが向上します。

于 2016-03-28T07:01:16.437 に答える