尝试在 Tab 中调用 Item 的函数时出现 ReferenceError

ReferenceError while trying to call function of Item within Tab

我试图从另一个 qml 文件用户组件 ID 调用 qml 文件的函数,但我遇到了一些问题。有人可以帮我解决这个问题吗? 这是我的代码。

Browser.qml:

import QtQuick 2.0

Item {
    function callme(message) {
        console.log(message)
    }
}

main.qml:

import QtQuick 2.3
import QtQuick.Controls 1.0
import QtQuick.Controls.Styles 1.0

ApplicationWindow {
    visible: true
    width: 640
    height: 100
    TabView {
        id: tabView
        width: 640
        height: 50
        Tab {
            width: 100
            title: "Sample1.html"
            onVisibleChanged: {
                browser1.callme("hi")
            }
            Browser {
                id: browser1
            }
        }
        Tab {
            width: 100
            title: "Sample2.html"
            onVisibleChanged: {
                browser2.callme("bye")
            }

            Browser {
                id: browser2
            }
        }
    }
}

报告错误:

ReferenceError: browser1 is not defined

如果您想访问 Tab 控件中的项目,您必须使用它的 item 属性。我已经更改了您的信号处理程序并且它有效:

...
onVisibleChanged: {
    item.callme("hi")
}

Browser{
  id: browser1
}
...

Tab 控件继承自 Loader 组件。它以其 children 作为代表,并且它们仅在选项卡被激活时创建。大多数行为与 Loader 组件相同。

实验记录

如果我们在 Tab 中定义两个或多个组件会发生什么? Loader 组件仅接受委托,创建的组件由 item 属性 访问。 Tab 组件映射 children 属性 到 delegate 你可以定义多个,但我意识到 只创建了最后一个 child .