公开子属性时出现 QML 错误

QML error on exposing child properties

本文关键字:QML 错误 属性      更新时间:2023-10-16

我有一个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
    }
}

为什么?

从文档中可以看出,Component的范围是:

组件内对象 ID 和组件根元素属性的联合

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

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

Item {
    property string source: a.internalImage.source
    property string text: a.internalText.text
    onSourceChanged: a.internalImage.source = source
    onTextChanged: a.internalText.text
}

我希望这有帮助