2017-09-28 5 views
1

Ich setze Eigenschaft von qml mit C++ - Funktion (aus der Bibliothek, ich sehe keine Implementierung), nach Verwendung dieser Funktion Eigenschaft auf Schaltfläche wird wie erwartet geändert (Wert, den ich aus C++ Code gesetzt), aber auf Text ist nur "Mein Name ist:" ohne Wert eingestellt. Meine Frage ist, wie man zwei Zeichenfolgen in QML Javascript Funktion verbindet, wenn man Ergebnis qsTr() Funktion ist und zweitens ist Eigenschaft aus C++ gesetzt?Verknüpfen von 2 Zeichenfolgen in 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 
} 

On Button: John Smith

Auf Text: My Name is:

+0

Mögliche Duplikat von [ Was ist die Äquivalenz für QString :: arg() in QML? (Https://stackoverflow.com/questions/12758282/what-is-the-äquivalence-for-qstring) arg-in-qml) – the4kman

Antwort

0

du mit args tun können

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

Das Problem ist nicht Strings Beitritt ist, es ist die Bindung.

Wenn Sie tun myText.text = ...name ist noch nicht festgelegt. Und da Sie eine imperative Zuweisung durchführen, wird sie nicht aktualisiert, wenn sich name ändert.

Sie könnten eine Bindung mit Qt.binding() halten:

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

oder alternativ könnten Sie tun es nur deklarativ in myText:

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

Weitere Informationen hier: http://doc.qt.io/qt-5/qtqml-syntax-propertybinding.html

Verwandte Themen