3

这是任何语言中最愚蠢的事情,但我坚持如何在 QML 中做到这一点。

如何更改 QML 中标签的文本值?我错过了什么。。

我的代码如下:

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  
    }
 }

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

谢谢并恭祝安康。

4

2 回答 2

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

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

希望这可以帮助。

于 2012-10-20T09:37:47.417 回答
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
  }
}
于 2012-10-20T06:19:56.040 回答