2016-09-21 18 views
0

以下の例は私の問題を示しています。 左上に小さなRectangleを作成し、それをクリックすると赤と緑の間の色が切り替わります。StackViewにプッシュされたコンポーネントが正しくバインドされない

次に、私はStackViewを作成し、私はStackViewRectangleを押して

期待される動作は、トップをクリックする、ということでしょう左上の四角形の色にこの第二の四角形の色をバインドRectangleの左には、色がバインドされているので、StackViewRectangleの色も変更されます。残念ながら、これはそうではありません。スタックにstackRect2を押したときに物事がうまく動作

(注)この動作は、動作を期待してComponent::createObject()に沿ったものであるが、

import QtQuick 2.0 
import QtQuick.Window 2.2 
import QtQuick.Controls 1.4 

Window { 
    id: mainWindow 
    visible: true 
    width: 1280 
    height: 720 

    Rectangle { 
     id: rect 
     width: 100 
     height: 100 
     focus: true 

     color: toggle? "red":"green" 
     property var toggle:false; 
     MouseArea { 
      anchors.fill: parent 
      onClicked: rect.toggle = !rect.toggle 
     } 
    } 

    StackView { 
     id: stack 
     width: 100 
     height:100 
     anchors.left: rect.right 
     anchors.leftMargin: 10 

     Component.onCompleted: { 
      stack.push ({item:stackRect, properties: {color:rect.color}}) 
      //stack.push ({item:stackRect2}) 
     } 
    } 

    Component { 
     id:stackRect 
     Rectangle {} 
    } 
    Component { 
     id:stackRect2 
     Rectangle {color:rect.color} 
    } 
} 
+0

確かに言うことはできませんが、StackViewの内部動作がバインディングを壊す原因になると推測します。おそらくこれと関係があります:バインディングを持つ_Aプロパティは、必要に応じて自動的に更新されます。ただし、プロパティに後でJavaScriptステートメントから静的な値が割り当てられると、バインディングは削除されます。_ –

答えて

0

Apparently(コメント内の行を参照してください)。 使用する

stack.push (stackRect, {color:Qt.binding(function() { return rect.color})}) 

はうまくいきます。

+0

https://forum.qt.io/topic/24152/solved-component-createobject-bindings-don- 'Component :: createObject'に関する同様の質問のためのt-work/4 –

関連する問題