这是任何语言中最愚蠢的事情,但我仍然坚持如何在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
}
}
我不确定为什么不工作。即使使用别名属性,文本也会拒绝更改。 我将不胜感激。
谢谢和问候。
答案 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
}
}