gpt4 book ai didi

qt - QML:无法读取未定义的属性 'xxx'

转载 作者:行者123 更新时间:2023-12-04 18:35:24 26 4
gpt4 key购买 nike

ApplicationWindow {
id: root

property string rootName: "--rootName"

visible: true
width: 800
height: 400

title: qsTr("WatchFace Maker")

WatchLcd{
property string watchLcdInApp: "watchLcdInApp"
id: watchLcd
}

TextAdder{
id: textAdder

Component.onCompleted: {
console.log("APP: ", root.watchLcd.watchLcdInApp)//#Error!!! remove root, it works.
}
}
}

我想知道:
  • 为什么当我在上面的注释行中添加 root id 时它不起作用?
  • 如果子组件是从 XXX.qml 文件创建的,子组件如何访问兄弟组件的属性?
  • 最佳答案

    id属性是一种“特殊类型”的属性,它只能在“代码时间”解析,不能在运行时解析。
    root.watchLcd将无法工作,因为 watchLcdid ,因此无法通过 root.watchLcd 解决
    id逻辑上也仅适用于该特定来源,而您只需要该特定来源 id无论对象树的结构如何,您都不需要它的父级 idroot.watchLcd
    如果你想从另一个文件访问一个特定的对象,自然而然,这不能通过它的 id 发生。 .您可以为其使用属性或函数:

    //SomeItem.qml
    Item {
    property alias text : obj.text
    Item {
    id: obj
    property string text
    }
    property Item object : obj
    function getObj() { return obj }
    }

    /main.qml
    Window {
    visible: true

    SomeItem {
    id: item
    text: "someText"
    }

    SomeItem {
    Component.onCompleted: {
    //console.log(item.obj.text) // TypeError: Cannot read property 'text' of undefined
    console.log(item.object.text) // someText
    console.log(item.getObj().text) // someText
    }
    }
    }

    另外,请注意 property alias有效 - 在许多情况下它可能很有用,如果您需要访问的只是嵌套对象的属性,则可以使用别名公开它,而无需从外部访问该对象。

    关于qt - QML:无法读取未定义的属性 'xxx',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36736573/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com