动态更改标签文本QML

时间:2012-10-19 20:50:14

标签: 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  
    }
 }

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

谢谢和问候。

2 个答案:

答案 0 :(得分:6)

您需要使用控件的id.aliasname访问别名。 &安培;通过在其根目录中声明myFunction为全局(例如,在本例中为Page),如果它在如下的多个插槽中使用:

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();
            }
        }
     }
  }
}

或者如果它仅用于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!";
        }
    }
}
}

希望这有帮助。

答案 1 :(得分:2)

您不必使用Qt.omething'来更改QML对象的属性。更改属性的方法是'objectId'。'property'=“value”;。所以试试这个:

Container {
  objectName: "formContainer"
  id: formContainer

  Label {
    id: labelTest
    text: "test"
  }

  TextField {
    id: textFieldPass
    onFocusedChanged: {
      if (focused) {
        myFunction();
      }
    }
  }

  function myFunction(){
   //Enter successfuly to the function
   console.log("labelTest.text:" + labelTest.text);
   labelTest.text = "Y U NO change!";  //Does nothing
  }
}