2017-09-28 22 views
1

이 함수 속성을 사용한 후 C++ 함수 (라이브러리에서 구현되지 않음)를 사용하여 qml 속성을 설정했습니다. 버튼이 예상대로 변경되었습니다 (C++ 코드에서 설정 한 값). 하지만 텍스트는 "My name is :"값없이 설정됩니다. 내 질문은 두 문자열을 합치는 방법 qsTr() 함수의 결과이고 두 번째가 속성 인이 C++에서 설정되면 QML 자바 스크립트 함수에서 두 문자열을 결합하는 방법입니다. 버튼을QML에서 두 문자열 합치기

property string name: "" 

function myFunction() { 
    myText.text = qsTr("My Name is: ") + name; 
    //myText.text = qsTr("My Name is: " + name);//another try 
} 
Text{ 
    id: myText 
    text: "" 
} 
Button { 
    text: name 
} 

: John Smith

텍스트 : My Name is:

+0

가능한 중복 [ QML에서 QString :: arg()의 동등성은 무엇입니까?] (https://stackoverflow.com/questions/12758282/what-is-the-equivalence-for-qstring arg-in-qml) – the4kman

답변

0

당신은 문제는 문자열에 가입되지 않은 인수

var message = "My name is %1"; 
var name = "John Smith"; 
myText.text = message.arg(name); 
3

하여이 작업을 수행 할 수 있습니다, 그것은 바인딩입니다.

할 때 myText.text = ...name은 아직 설정되지 않았습니다. 그리고 당신은 명령형 지정을하고 있기 때문에 name이 변경되면 업데이트되지 않습니다.

당신은 Qt.binding() 바인딩 유지 수 :

myText.text = Qt.binding(function() {return qsTr("My Name is: ") + name;}); 

또는 양자 택일로, 당신은 단지 myText에 선언적으로 그것을 할 수 :

Text { 
    id: myText 
    text: qsTr("My Name is: ") + name 
} 
여기

더 많은 정보 :의 http://doc.qt.io/qt-5/qtqml-syntax-propertybinding.html