2017-11-23 7 views
1

プロパティp1,p2,p3 ... pnの要素FlowChartがあります。 SensorValuesSetterは、深く位置する要素Buttonを使用してこれらのプロパティにアクセスできる必要があります。親の親を正しく参照する方法は?

私はそのようなソリューションを想像:

// main.qml 

// ... 

FlowChart { 
     id: flowChart 
     anchors.fill: parent 


     SensorValuesSetter { 
      id: valueSetterWindow 
     } 

     // ... 

} 

// SensorValuesSetter.qml 
ApplicationWindow { 
     id: valueSetterWindow 

     // ... 

     GridLayout { 
      // ... 

      Label { text: "Давление 1: "; Layout.fillWidth:true; } 
      ValueInputField { id: p1_val_field; } 

      Label { text: "Давление 2: "; Layout.fillWidth:true; } 
      ValueInputField { id: p2_val_field; } 

      // .... 

      Button { 
       id: button 
       text: qsTr("Применить") 
       onPressed: { 
        valueSetterWindow.parent.p1.value = Number.fromLocaleString(p1_val_field.text) 
        valueSetterWindow.parent.p2.value = Number.fromLocaleString(p2_val_field.text) 
        // ... 
     } 
} 

をしかし、この場合にはエラーTypeError: Cannot read property 'p1' of undefinedまたはTypeError: Cannot read property 'p1' of undefinedが表示されます。

問題点を教えてください。私は、私が間違った方法で親の親を参照しようとしたという手掛かりがあると思います。

答えて

1

ApplicationWindowは、Itemであるため、プロパティはありません。parent

あなたは動的スコープ(see more on the scopes here)

に依存するか、またはあなたが新しいプロパティで明示的にを渡す:

// SensorValuesSetter.qml 
ApplicationWindow { 
    property Item parent // Add the missing property. Maybe some other name... 
    [...] 
} 

をそして、あなたはそれをインスタンス化場所:

SomeItem { 
    id: myItem 
    SensorValuesSetter { 
     parent: myItem // Set it explicitly 
    } 
} 
関連する問題