如何正确引用父级的父级?

时间:2017-11-23 16:45:26

标签: qt qml qtquick2

元素FlowChart包含属性p1p2p3 ... pnSensorValuesSetter必须能够使用位于其中的元素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 undefinedTypeError: Cannot read property 'p1' of undefined

你能解释一下我的问题是什么吗?我想有线索是我试图以错误的方式引用父母的父母。

1 个答案:

答案 0 :(得分: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
    }
}