2017-05-11 6 views
2

QtQuick.Controls 2.xRangeSliderをコンポーネントに入れました。 min.valueQObjectのサブクラスであり、QMLコンテキストにさらされているモデルオブジェクトにバインドしました。QML/C++でバインドされたオブジェクトを持つUIを初期化できません

「設定」という名前でQMLからアクセスできます。コントロールは、LoaderのonLoaded:{...}の設定を読み込んで初期化することになっています。私はBinding-Loaderの外にあるオブジェクトにmin.valueの変更を書き戻しました。 しかし、コントロールは常に設定のプロパティを設定するので、設定のプロパティで初期化することはできません。

Loader { 
    id: loader 
    sourceComponent: ctrl 
    onLoaded: { 
     loader.item.min = settings.min 
    } 
} 
Binding { 
    target: settings 
    property: "min" 
    value: loader.item.min.value 
} 
Component { 
    id: ctrl 
    Item { 
     property alias min: slider.first 
     RangeSlider { 
      id: slider 
      ... 
     } 
    } 
} 

Iはsettings.minのloader.item.min.value(即ちslider.first.value)値を割り当てるが、この割り当てが起こる前に、settings.minはslider.first.valueに変更されます。ユーザーが新しい値を設定した後、settings.minslider.first.valueに設定します。

これを正しく実装する方法を知っている人はいますか?

+0

私はLoaderのsetSourceメソッドを使用しようとします: オブジェクトsetSource(url source、object properties) – Jas6033

答えて

2

Binding -Objectのプロパティwhenを使用して、インライン値を設定するまでバインディングを無効にすることができます。 falseにinitallyそれを設定し、また、あなたのonLoaded

-handlerの1行目に trueに非常に興味深い、それを変更することは delayed -propertyです。これがうまくいくかどうかは保証できませんが、それは洗練されたソリューションかもしれません。私はまだそれを試していない。

関連する問題