将文本保存为textfield blackberry中的标签

时间:2013-07-22 09:19:37

标签: qml blackberry-cascades

我想在标签上显示最近输入的文字。这是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的输入文本后我想保存标签的文本,所以当我输入新的评论时,它将被保存到其他标签

4 个答案:

答案 0 :(得分:2)

将ID添加到Label,如下所示

 Label {
    id: label
    ....
 }

然后在提交处理程序的TextField上,您可以从textField获取文本并将其设置为标签,如下所示

 onSubmitted: {
    label.text = tfComment.text;
 }

答案 1 :(得分:1)

这与Qt信号/插槽和属性机制有关。您的商品TextFieldLabel具有相应的商品。他们共同拥有的一个特定属性是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