在我的QML应用程序中,我有一个TabView,Tabs和一些按钮和文本字段。我需要使用外部TabView组件中的自定义函数来访问它们,这些组件是从Tab内部的按钮调用的。
我的代码非常简单:
ApplicationWindow {
function showText() {
console.log(tabView.testText);
}
TabView {
id: tabView
property alias testText: test.text
Tab {
title:'tab1'
RowLayout {
Button {
text:"PRINT"
onClicked: {
showText()
}
}
Text {
id:test
text:'Test123'
}
}
}
Tab {
title:'tab2'
}
}
}
但是我收到了别名创建行的错误消息:
Invalid alias reference. Unable to find id "test"
它出了什么问题?我在SO(ReferenceError in qt quick controls tabview)上关注了类似的问题,但代码也没有。
答案 0 :(得分:0)
我认为你应该添加一个这样的别名:
TabView {
id: tabView
property var testText: { return getTab(0).tab1Text }
Tab {
id: tab1
title:'tab1'
property alias tab1Text: test.text
RowLayout {
Button {
text:"PRINT"
onClicked: {
showText()
}
}
Text {
id:test
text:'Test123'
}
}
}
Tab {
title:'tab2'
}
}
答案 1 :(得分:0)
正如this回答中提到的,Tab
基本上是Loader
,这意味着您尝试通过别名访问的属性可能尚未加载。 alias
有一些strict requirements,其中一个是“仅在组件完全初始化后才会激活”:
由于您在show()
内尝试访问Tab
方法,因此您只需传递所需的数据:
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Extras 1.3
import QtQuick.Layouts 1.1
ApplicationWindow {
width: 300
height: 600
visible: true
function showText(text) {
console.log(text)
}
TabView {
id: tabView
Tab {
title: 'tab1'
RowLayout {
Button {
text: "PRINT"
onClicked: {
showText(text)
}
}
Text {
id: test
text: 'Test123'
}
}
}
Tab {
title: 'tab2'
}
}
}