是否可以做这样的事情:
import QtQuick 2.7
import QtQuick.Window 2.2
Window{
id: root_
visible: true
width: 300
height: 300
Component {
id:compouter
Column{
anchors.fill: parent
Component {
id: compinner
Rectangle {
width:parent.width
height:parent.height/2
}
}
}
}
Component.onCompleted: {
var c = compouter.createObject(this)
//var d = c.compinner.createObject(c, {"color": "green"})
//var e = c.compinner.createObject(c, {"color": "red"})
}
}
也就是说,我想在外部对象中创建多个对象(在创建外部对象之后)。然而,这是不可能的,因为我得到错误:
TypeError: Cannot call method 'createObject' of undefined
这有什么解决方法吗?是否可能只能在外部对象实例化期间实例化所有内部对象?
答案 0 :(得分:0)
id
超出了函数调用的范围。
您可以向外部组件添加一个创建对象的函数:
Component {
id:compouter
Column{
anchors.fill: parent
function createCompinner(arg) { compinner.createObject(this, arg) }
Component {
id: compinner
Rectangle {
width:parent.width
height:parent.height/2
}
}
}
}
或者将内部Component
公开为属性:
Component {
id:compouter
Column{
property alias compinner: compinnerComponent
anchors.fill: parent
Component {
id: compinnerComponent
Rectangle {
width:parent.width
height:parent.height/2
}
}
}
}
并像那样访问它。
答案 1 :(得分:0)
好的,我通过向outter对象发送信号找到了解决方法:
import QtQuick 2.7
import QtQuick.Window 2.2
Window{
id: root_
visible: true
width: 300
height: 300
Component {
id:compouter
Column{
anchors.fill: parent
signal createRect(var color)
onCreateRect: {
compinner.createObject(this, {"color": color})
}
Component {
id: compinner
Rectangle {
width:parent.width
height:parent.height/2
}
}
}
}
Component.onCompleted: {
var c = compouter.createObject(this)
c.createRect("green")
c.createRect("red")
}
它正在运作,但也许有一些更通用的方法(参见接受的答案)。正如海报建议的那样,调用函数在语义上比发送信号更干净