Qt 从属于转发器的文本字段绑定文本
My main.qml:Qt 从属于转发器的文本字段绑定文本,qt,qml,Qt,Qml,My main.qml: Window { visible: true width: 640 height: 480 color: "grey" GridLayout { anchors.fill: parent columns : 2 rows : 2 Repeater { id: rectRepeater
Window
{
visible: true
width: 640
height: 480
color: "grey"
GridLayout
{
anchors.fill: parent
columns : 2
rows : 2
Repeater
{
id: rectRepeater
model: 3
TextField
{
text: "hi"
}
}
}
Rectangle
{
id: r1
width: 100
height: 100
x: 200
y: 200
border.color: "red"
Text
{
id: t1
}
}
Component.onCompleted:
{
t1.text= rectRepeater.itemAt(0).text
}
}
矩形
r1
中的文本在开始处显示文本,但如果我在文本字段中输入新文本,矩形将不会更新。如何解决这个问题?您想要的是在两者之间创建绑定
Component.onCompleted:
{
t1.text = Qt.binding(function() { return rectRepeater.itemAt(0).text })
}
也就是说,我们需要确切地知道您正在尝试做什么,因为手动创建绑定在不需要时是一种反模式。直接绑定或使用信号要好得多
您是否需要第一个元件和中继器,或者这只是对您的测试?你的用户界面是什么?你想实现什么?这是一个值得给出正确答案的上下文
一个可能更简单的解决方案
Repeater
{
id: rectRepeater
model: 3
TextField
{
text: "hi"
// See also `onEditingFinished` and `onValidated`
onTextChanged: {
if (index == 0)
t1.text = text
}
}
}
有关属性的更多详细信息,请查看我对您的另一个问题的回答:一个更优雅且可维护的解决方案是实现一个反映更改的模型,然后使用显示文本的文本绑定第一个元素:
Window{
visible: true
width: 640
height: 480
color: "grey"
ListModel{
id: mymodel
}
Component.onCompleted: {
for(var i=0; i<3; i++){
mymodel.append({"text" : "hi"})
}
}
GridLayout{
anchors.fill: parent
columns : 2
rows : 2
Repeater{
model: mymodel
TextField{
id: tf
onTextChanged: model.text = tf.text
Component.onCompleted: tf.text= model.text
}
}
}
Rectangle{
id: r1
width: 100
height: 100
x: 200
y: 200
border.color: "red"
Text {
id: t1
text: mymodel.count > 1 ? mymodel.get(0).text : ""
}
}
}
窗口{
可见:正确
宽度:640
身高:480
颜色:“灰色”
列表模型{
id:mymodel
}
Component.onCompleted:{
对于(VARI=0;I1?mymodel.get(0)。文本:“
}
}
}
谢谢,但稍后我有81个条目,因此模型列表将非常有用long@JohnSmith我正在考虑我的解决方案的缺点,看看我更新的解决方案:-)@JohnSmith 1。Qt建议不要进行直接绑定(text:mymodel.count>1?mymodel.get(0)。text:
),因为它会保存使用Qt.binding的资源(t1.text=Qt.binding(function(){return rectreater.itemAt(0.text})
)由于Qt当前正试图修复它,因此在某些级别上可能会失败。@JohnSmith多少字节占用更多数据?在一个可维护的应用程序中,通常会给它一个较轻的层,这样维护就很简单,只需花费几个字节,但作为交换,它可以帮助我们。如果您的想法是节省字节,而不是简化过程,那么您不应该使用Qt,而应该使用每个操作系统的本机代码,或者您认为为Qt添加的层是多平台的并且没有成本吗?在C++中,最小化是一种不好的做法。@JohnSmith,哪种变体更快?,因为很难知道,因为你的例子没有涵盖所有的可能性,平均而言,两者都很快,但对于你的“简单应用程序”,一个会在几微秒内更快,这被称为微型优化,在实际问题中没有任何优势,这就像说一种图像压缩算法比另一种算法更快,因为它只需要少一个字节。