2012-10-19 196 views
3

這是在任何語言中最難的事情,但我堅持如何在QML中做到這一點。動態更改標籤文本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 
    } 
} 

我不知道爲什麼不工作。即使有別名屬性,文本也拒絕更改。 我會感謝任何幫助。

感謝和問候。

回答

6

您需要使用控件的id.aliasname訪問別名。 &化妝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(); 
      } 
     } 
    } 
    } 
} 

,或者如果它被只用於文本字段的控制,可以使它是這樣的地方:

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!"; 
     } 
    } 
} 
} 

希望這會有所幫助。

2

您不必使用Qt.'something'來更改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 
    } 
}