qt快速控制tabview中的ReferenceError

时间:2014-11-03 19:40:30

标签: qt qml

我的代码一直给我一个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()
              }
          }
       }
    }
}

1 个答案:

答案 0 :(得分:3)

您在此处具有层次结构以及特定的范围。如果不将id暴露给更高范围 而不通过层次结构,则无法访问TabView,而是以正确的方式。< / p>

让我们检查一下您的Tab:它有一个Grid元素,其中包含grid(我假设Grid元素实际上是Button !)其中包含您要修改的Button。如果您想从b0 tv访问它,则必须:

  1. 选择item
  2. 中的标签
  3. 选择包含Grid(通过相同名称的媒体资源) - &gt;它是item
  4. 选择Grid的第一个Button(这是唯一的b1}
  5. 因此,在当前设置中,从b0 clicked信号处理程序修改tv.getTab(0).item.children[0].text = " XD " 文本的正确代码如下:

    data[0]

    请注意,可以使用children[0]代替{{1}}(请参阅Item元素文档)。正如您在此处所看到的,您导航层次结构以到达要修改的QML元素。


    如您所见,以前的代码很乏味且容易出错。 更好方法将使用aliasing功能以及Javascript来改善整体效果;其他用户已经advised you对此表示友善。