我在同一个.qml文件中有两个Windows
。
Window1有textinput1
和button
,当我按下button
时,我想将textinput
的字符串值发送到{{} 1}} Window2
。
我是Qt和QML的新手,在textInput2
,signals
,Loaders
上阅读了很多内容,并且无法实现这种转移。任何人都可以做一个简单的10行这种转移的例子吗?
properties
如果我这样做,它会给我 Window {
id:window
TextInput {
id:text1
text: "This value is needed in the second Window!"
}
Button {
onClicked: window2.open()
}
Window {
id.window2
function open(){
visible = true
}
Text {
text: text1.text
}
}
}
,如何引用第一个ReferenceError: text1 is not defined
中的text1
?
答案 0 :(得分:1)
我在同一个.qml文件中有两个Windows。
如果您这样做,那么您的代码将起作用。由于它不起作用,我假设每个窗口都在自己的qml文件中定义,并且你只在同一个qml文件中实例化这两个窗口。
如果我这样做,它会给我ReferenceError:text1没有定义,怎么可以 我从第一个窗口引用text1?
您必须首先引用该窗口,它应该提供一个引用该文本的界面。
请注意,理想情况下id
只应用于引用同一来源中的内容。在极少数情况下,你可以走得更远,并引用id
向下的对象树,但只有父母,而不是他们的外线孩子,它将适用于给予的内嵌儿童{{ 1}}在同一个来源中。这意味着如果在id
内创建了window2
,那么您就可以在window
内引用window
。但如果两个窗口都是另一个对象中的兄弟,则window2
将无法解析。
id
在此示例对象树中,Obj1
Obj2
Obj4
Obj3
将从任何对象中解析。但是,Obj1
如果在Obj3
内提供了Obj2
,则无法解析id
,但Obj2
id
会解析Obj2
在Obj1
内给出。但是无法从Obj4
解决Obj3
。因为id
不像属性那样,你不能someId.someOtherId
,这只能用于属性。你也不能somePropertyObject.someId
。您只能以id
或属性开头,并且只能继续使用子属性。
当id
不适用时,可以将对象或属性公开为属性或属性别名。当你想暴露整个对象时,第一个是有用的,当你想暴露一个对象的特定属性时,第二个是有用的:
Item {
property Item innerItem: inner // gives you access to the "entire" inner object
property alias innerWidth: inner.width // gives you access to a property of inner
Item {
id: inner
}
}
您也可以使用别名别名。
答案 1 :(得分:1)
在这种情况下我更愿意使用信号:
Window {
id: window1
title: "window 1"
visible: true
width: 600
height: 600
signal someSignal()
Button {
anchors.centerIn: parent
text: "Open window"
onClicked: window1.someSignal()
}
Window {
id: window2
title: "window 2"
width: 400
height: 400
// you can use this instead of Connections
//Component.onCompleted: {
// window1.someSignal.connect(show);
//}
}
Connections {
target: window1
onSomeSignal: {
window2.show();
}
}
}
我认为这更多......你怎么说? ......更迫切 - )