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を使用してエイリアスにアクセスする必要があります。&myFunctionが次のように複数のスロットで使用されている場合は、ルート(この場合は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

QMLオブジェクトのプロパティを変更するためにQt.'something'を使用する必要はありません。プロパティを変更する方法は、'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 に答える