假设我有两个文件:
main.qml
import QtQuick 2.0
import QtQuick 2.9
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
color: pRect.color
Red{
id:pRect
}
}
和Red.qml
import QtQuick 2.0
Rectangle {
id: pRect
color: "red"
Rectangle{
id: cRect
color: "blue"
}
}
其中main.qml使用Red.qml中父矩形'pRect'的颜色。但是,如果我现在想使用子矩形'cRect'的颜色,则可以尝试类似的方法。
color: pRect.cRect.color
但这不起作用,我有办法访问该颜色值吗?
答案 0 :(得分:1)
如the docs所示:
可以在声明对象的组件范围内的任何位置通过其ID引用对象。
也就是说,pRect
和cRect
在Red.qml
之外没有任何意义。
那为什么要在main.qml中使用pRect?因为您创建了一个具有相同名称的项目,所以如果创建另一个Red项目,则必须放置另一个ID:
Red{
id:pRect
}
Red{
id:pRect2
}
所以它认为现在已经坏了:什么是pRect?
因此,唯一的解决方案是将子代的属性公开为父代的属性:
Red.qml
import QtQuick 2.9
Rectangle {
id: root
property alias childcolor: child.color
color: "red"
Rectangle{
id: child
color: "blue"
}
}
main.qml
import QtQuick 2.9
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
color: pRect.childcolor
Red{
id:pRect
}
}
因此,总而言之,组件根元素的子元素的属性是私有的,如果要在外部使用它,则必须使用根属性公开它。