0

我想在标签上显示最近输入的文本。这是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, "");
                                }
                            }
                        }
                    }
                }

因此,当用户从第一个文本字段输入一个短语时,我希望该短语显示在它下面的标签中。更像是短信。我怎么做?在将输入的文本从文本字段显示到标签后,我想保存标签的文本,所以当我输入新评论时,它将被保存到其他标签

4

4 回答 4

2

将 id 添加到标签,如下所示

 Label {
    id: label
    ....
 }

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

 onSubmitted: {
    label.text = tfComment.text;
 }
于 2013-07-22T14:48:34.960 回答
1

这都与 Qt 信号/插槽和属性机制有关。您的项目TextFieldLabel具有属性。它们共有的一个特定属性是text(请注意名称相同,但真正重要的是类型 - 两个具有不同名称的属性也可以绑定)。您可以将一个属性绑定到另一个属性:

Label {
    text: myTextField.text
}
TextField {
    id: myTextField
}

现在,只要TextField' 的文本发生变化,Label' 就会相应地更新。请注意,只有在失去焦点或提交时才会更新TextField'属性。text

这是做你需要的简单方法。有一种更通用的方法可以做到这一点。Qt 的属性系统是基于信号/槽机制的。信号是 aQObject可以发送的东西,以通知其他QObject孩子。插槽是一种特定的方法,可以连接到信号。然后,如果信号 A 连接到插槽 B,则无论何时发出信号 A,都会调用插槽 B。

TextField对象有一个input孩子,它有一个submitted信号。你可以猜到,每当用户提交TextField. 嗯,那是每次你想改变你Label的 text 属性的时候!让我们在插槽中执行此操作:

Label {
    id: myLabel
}
TextField {
    id: myTextField
    input {
        onSubmitted: {
            myLabel.text = myTextField.text;
        }
    }
}

这里,该函数是一个槽,每当信号发出onSubmitted时,Qt 都会自动调用它。submit你当然可以在这个插槽中做任何你想做的事情:更新这个对象或其他对象的属性,调用 C++ 方法,......你是自由的。

您将在此处找到有关信号和插槽的完整参考,以及有关属性完整参考(在 BlackBerry 的文档中找不到此参考,但它正是 BlackBerry 使用的)。

于 2013-07-23T01:35:47.530 回答
0

给你的标签一个 id(例如id : myLabel),然后在你的onSubmitted插槽中将 的文本分配TextField给该标签,如下所示:

onSubmit :{
    myLabel.text = tfComment.text
}
于 2013-07-22T14:45:21.427 回答
-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
于 2013-07-22T12:59:34.420 回答