动态更改标签文本QML

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)

我不确定为什么不工作.即使使用别名属性,文本也会拒绝更改.我将不胜感激任何帮助.

感谢致敬.

Nis*_*hah 6

您需要使用控件的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)

希望这可以帮助.