mar*_*era 3 qt qml blackberry-10
这是任何语言中最愚蠢的事情,但我仍然坚持如何在QML中做到这一点.
如何在QML中更改Label的文本值?我错过了什么..
我的代码如下:
Container {
objectName: "formContainer"
id: formContainer
property alias text1: labelTest.text
onCreationCompleted: {
Qt.labelTest = labelTest;
Qt.text1 = formContainer.text1;
}
Label {
id: labelTest
text: "test"
}
TextField {
id: textFieldPass
onFocusedChanged: {
if (focused) {
Qt.myFunction();
}
}
}
function myFunction(){
//Enter successfuly to the function
console.log("Qt.labelTest.text:" + Qt.labelTest.text); //Output: undefined
Qt.labelTest.text = "Y U NO change!"; //Does nothing
Qt.text1 = "Y U NO change!"; //Does nothing
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定为什么不工作.即使使用别名属性,文本也会拒绝更改.我将不胜感激任何帮助.
感谢致敬.
您需要使用控件的id.aliasname访问别名.并通过在其根目录(即本例中的Page)中声明myFunction为全局,如果它在多个槽中使用,如下所示:
Page {
function myFunction() {
formContainer.text1 = "Y U NO change!";
}
Container {
id: formContainer
property alias text1: labelTest.text
Label {
id: labelTest
text: "test"
}
TextField {
id: textFieldPass
onFocusedChanged: {
if (focused) {
myFunction();
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者,如果它仅用于TextField控件,您可以将其设置为本地,如下所示:
Page {
Container {
id: formContainer
property alias text1: labelTest.text
Label {
id: labelTest
text: "test"
}
TextField {
id: textFieldPass
onFocusedChanged: {
if (focused) {
myFunction();
}
}
function myFunction() {
formContainer.text1 = "Y U NO change!";
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.