我有两个.qml文件:
CustomText.qml :
Item
{
TextField
{
id: t1
placeholderText: qsTr("Enter name")
}
}
main.qml :
Window
{
visible: true
width: 640
height: 480
title: qsTr("Hello World")
CustomText {width: 200; height: 200}
Rectangle
{
id: r1
border.color: "black"
width: 200
height: 200
x: 200
y: 200
Text
{
text: t1.text
}
}
}
此代码不起作用,因为该ID未知。如何从TextField
中的main.qml
访问文本?
答案 0 :(得分:2)
有两种方法可以完成此操作,即
t1.text
,绑定customText.text
,或 t1
,绑定customText.t1.text
请注意,在这两种方法中,我们都需要为您的id
实例提供CustomText
,以便我们可以引用它。在这两种方法中,我们还将使用property aliases
。这些使您可以公开CustomText
的某些属性。
t1.text
,已绑定customText.text
// CustomText.qml
Item
{
property alias text: t1.text // set a property alias
TextField
{
id: t1
placeholderText: qsTr("Enter name")
}
}
// Main.qml
Window
{
visible: true
width: 640
height: 480
title: qsTr("Hello World")
CustomText { id: customText; width: 200; height: 200 } // provide an id for reference
Rectangle
{
id: r1
border.color: "black"
width: 200
height: 200
x: 200
y: 200
Text
{
text: customText.text // bind the text property
}
}
}
t1
,已绑定customText.t1.text
// CustomText.qml
Item
{
property alias t1: t1 // set a property alias
TextField
{
id: t1
placeholderText: qsTr("Enter name")
}
}
// Main.qml
Window
{
visible: true
width: 640
height: 480
title: qsTr("Hello World")
CustomText { id: customText; width: 200; height: 200 } // provide an id for reference
Rectangle
{
id: r1
border.color: "black"
width: 200
height: 200
x: 200
y: 200
Text
{
text: customText.t1.text // bind the property
}
}
}
如果您只需要使用TextField
中的文本,而没有其他选择,我建议您使用第一种方法,因为您仍然将t1
的其余部分封装起来(有人可能会说一个“ 私有”变量)。
通常,除非必须在文件外部修改 entire t1
对象,否则从不使用第二种方法。 (可能会有一些例外,但是这种模式倾向于暗示设计模式中的缺陷,需要重构。)坚持第一种方法。如果您发现自己不得不引用/修改TextField
的其他属性(placeholderText
,font
等),则还应该使用别名并公开这些属性。