动态创建的组件无法访问父属性
Posted
技术标签:
【中文标题】动态创建的组件无法访问父属性【英文标题】:Dynamically created components cannot access parent properties 【发布时间】:2021-08-01 15:59:12 【问题描述】:在我的 python & qml 项目中,我的页面结构如下
Window
|-myObject
|-Loader
|-homePage
|-myComponent
其中 MyComponent 是我使用以下 Python 代码动态创建的组件:
root = engine.rootObjects()[0].findChild(QObject, "HomePage")
componentFigure = QQmlComponent(engine)
componentFigure.loadUrl(QUrl("components/MyComponent.qml"))
instanceFigure = componentFigure.create()
instanceFigure.setParentItem(root)
现在我想访问 myObject 属性,从 HomePage
可以正常工作,从 myComponent
它不工作(无法读取 PropertyName of undefined)
我的组件创建可能有问题?
根页面代码:
Window
Settings
id: appSettings
property bool light: true
QtObject
id: myObject
property color myColor: appSettings.mySetting ? "#FFFFFF" : "#000000"
Rectangle
anchors.fill: parent
Loader
anchors.fill: parent
source: Qt.resolvedUrl("pages/homePage.qml")
我的组件代码:
MyComponent
anchors.fill: parent
Rectangle
anchors.fill: parent
color: myObject.myColor
【问题讨论】:
请添加您的代码,以便我们了解您是如何尝试进行这些引用的。 【参考方案1】:问题是myObject
只会成为根组件中的可见标识符。它不会从该文件之外的其他组件中看到。只有组件的*** QML 元素的属性在组件范围层次结构中可见。
更多信息请参见:https://doc.qt.io/qt-5/qtqml-documents-scope.html#component-scope
您需要确保在您的代码中设置了这些连接,如下所示:
instanceFigure = componentFigure.create(qmlContext(root))
但是请注意,实际上并不推荐以这种方式访问组件(通过父组件范围的隐式访问)。最好通过显式属性向下传递对象引用。
【讨论】:
感谢您的回复,在我当前的配置中,我可以毫无问题地从其他文件访问 myObject 的属性,问题是我无法从动态加载的组件中访问它们。不幸的是,您建议的代码并没有改变任何东西以上是关于动态创建的组件无法访问父属性的主要内容,如果未能解决你的问题,请参考以下文章
如果数据属性在 VueJs 中从父组件传递到子组件,则无法将其作为对象进行操作