暴露子属性时出现QML错误

时间:2016-03-04 18:36:32

标签: c++ qt qml

我有一个QML对象定义如下:

Item {
    property alias source: a.internalImage.source
    property alias text: a.internalText.text

    Column {
        id: a

        Image {
            id: internalImage
        }

        Text {
            id: internalText
            width: internalImage.width
        }
    }
}

这失败了:Invalid alias target location: internalImage

但是,如果我这样做:

Column {
    property alias source: internalImage.source
    property alias text: internalText.text

    Image {
        id: internalImage
    }

    Text {
        id: internalText
        width: internalImage.width
    }
}

为什么?

2 个答案:

答案 0 :(得分:4)

documentation开始,Component的范围是:

  

组件中对象id的组合和组件的根元素的属性

因此,外部元素不允许通过id s链访问内部元素中包含的id。 另一方面,如果通过一组变量显式导出一组参数,那么这些值/引用可以自由地用于外部组件。

答案 1 :(得分:0)

我确实通过创建一个简单的属性和一个changeListener解决了这个问题

Item {
    property string source: a.internalImage.source
    property string text: a.internalText.text

    onSourceChanged: a.internalImage.source = source
    onTextChanged: a.internalText.text
}

我希望这对您有帮助