我的代码一直给我一个ReferenceError
。我试图通过使用
tv.b1Text = " XD "
如示例中所示,但它不起作用。我该如何解决这个错误?我相信存在类似的问题here。
这是我的代码:
Button {
id: b0
text:"b1's text"
onClicked: {
b1.text = " XD "
}
}
TabView {
id: tv
Tab {
id: tab1
grid {
Button{
id: b1
text:"b1's text"
onClicked: {
//console.log(b1.text)
show_text()
}
}
}
}
}
答案 0 :(得分:3)
您在此处具有层次结构以及特定的范围。如果不将id
暴露给更高范围 或 而不通过层次结构,则无法访问TabView
,而是以正确的方式。< / p>
让我们检查一下您的Tab
:它有一个Grid
元素,其中包含grid
(我假设Grid
元素实际上是Button
!)其中包含您要修改的Button
。如果您想从b0
tv
访问它,则必须:
item
Grid
(通过相同名称的媒体资源) - &gt;它是item
Grid
的第一个Button
(这是唯一的b1
} 因此,在当前设置中,从b0
clicked
信号处理程序修改tv.getTab(0).item.children[0].text = " XD "
文本的正确代码如下:
data[0]
请注意,可以使用children[0]
代替{{1}}(请参阅Item
元素文档)。正如您在此处所看到的,您导航层次结构以到达要修改的QML元素。
如您所见,以前的代码很乏味且容易出错。 更好方法将使用aliasing功能以及Javascript来改善整体效果;其他用户已经advised you对此表示友善。