我想在标签上显示最近输入的文字。这是qml的代码:
Container {
horizontalAlignment: HorizontalAlignment.Center
verticalAlignment: VerticalAlignment.Top
topPadding: 100
leftPadding: 50
rightPadding: leftPadding
/*TextArea {
id: taComment
preferredHeight: 270
editable: quoteBubble.editMode
enabled: enableSave
input.flags: TextInputFlag.SpellCheckOff
}*/
Label {
verticalAlignment: VerticalAlignment.Top
horizontalAlignment: HorizontalAlignment.Center
text: cppObj.desc
}
}
Container {
horizontalAlignment: HorizontalAlignment.Center
verticalAlignment: VerticalAlignment.Bottom
leftPadding: 50
rightPadding: leftPadding
bottomPadding: 40
TextField {
id: tfComment
hintText: qsTr("add comment")
inputMode: TextFieldInputMode.Text
input {
submitKey: SubmitKey.Submit
onSubmitted: {
cppObj.onCommentSubmitClicked(tfComment.text, "");
}
}
}
}
}
因此,当用户从第一个文本字段输入短语时,我希望该短语显示在其下方的标签中。更像是短信。我怎么做?显示从textfield到label的输入文本后我想保存标签的文本,所以当我输入新的评论时,它将被保存到其他标签
答案 0 :(得分:2)
将ID添加到Label,如下所示
Label {
id: label
....
}
然后在提交处理程序的TextField上,您可以从textField获取文本并将其设置为标签,如下所示
onSubmitted: {
label.text = tfComment.text;
}
答案 1 :(得分:1)
这与Qt信号/插槽和属性机制有关。您的商品TextField
和Label
具有相应的商品。他们共同拥有的一个特定属性是text
(请注意,名称是相同的,但真正重要的是类型 - 具有不同名称的两个属性也可以绑定)。您可以将属性绑定到另一个属性:
Label {
text: myTextField.text
}
TextField {
id: myTextField
}
现在,只要TextField
的文字发生变化,Label
的文字就会相应更新。请注意,TextField
的{{1}}属性仅在失去焦点或提交时才会更新。
这是做你需要的简单方法。有一种更通用的方法来做到这一点。 Qt的属性系统基于信号/插槽机制。信号是text
可以发送的信息,用于通知其他QObject
个孩子。插槽是一种特定的方法,可以连接到信号。然后,如果信号A连接到插槽B,每当发射信号A时,将调用插槽B.
QObject
对象有input
个孩子,其中有submitted
个信号。正如您所猜测的,只要用户提交TextField
,就会发出此信号。呃,每次你想改变TextField
的文字属性时都是这样!让我们在一个插槽中执行此操作:
Label
这里,Label {
id: myLabel
}
TextField {
id: myTextField
input {
onSubmitted: {
myLabel.text = myTextField.text;
}
}
}
函数是一个槽,只要发出onSubmitted
信号,Qt就会自动调用它。您当然可以在此插槽中执行任何操作:更新属性,在此对象或其他对象上,调用C ++方法,...您是免费的。
您可以找到有关信号和插槽here以及有关属性here的完整参考资料(在BlackBerry的文档中找不到这个,但它正是BlackBerry使用的内容)。
答案 2 :(得分:0)
为您的标签添加ID(例如id : myLabel
),然后在onSubmitted
广告位中将TextField
的文字分配给该标签,如下所示:
onSubmit :{
myLabel.text = tfComment.text
}
答案 3 :(得分:-1)
首先,您必须在QML的相关位置设置objectNames。
...
Label {
objectName: "label"
...
}
...
TextField {
objectName: "textField"
...
}
当然,我并不是说这些都是好名字。
完成后,从C ++中使用QML,即:
QmlDocument *qml = QmlDocument::create("asset///qml/YourQml.qml");
Container *container = qml->createRootObject<bb::cascades::Container>();
然后,您可以找到根对象(此处仅为假定的容器)子项并按名称操作它们。
TextField *textField = container->findChild<TextField*>("textField");
Label *label = container->findChild<Label*>("label");
...
label->setText(textField->text()); //take the text from textField and display in label