2017-06-30 4 views
1

Ich sollte Eigenschaft stringa1 und stringa2 auf Test.qml Punkt gesetzt, wenn ich die Komponente durch Loader qml (setSource) laden:Loader, setSource mit Parametern

Page1.qml

import QtQuick 2.7 

Page1Form { 

    button1.onClicked: { 
     console.log("Button Pressed. Entered text: " + textField1.text); 
     itemLoader.setSource("Test.qml", {"stringa1": "ScrivoStr1"}, {"stringa2": "ScrivoStr2"}) 
    } 

    itemToFill.children: 
     Loader { 
      anchors.fill: parent 
      id: itemLoader 
     } 
} 

-Test .qml

import QtQuick 2.4 

TestForm { 

    property string stringa1 
    property string stringa2 

    signal setStr1(string str1) 

    anchors.fill: parent 

    Component.onCompleted: { 

     button.text = stringa1 + " - " + stringa2 

    } 

    button.onClicked: console.log("Push"); 

} 

Als ich eingestellt stringa1 und stringa2 mit dem folgenden Befehl:

itemLoader.setSource("Test.qml", {"stringa1": "ScrivoStr1"}, {"stringa2": "ScrivoStr2"}) 

Test.qml Nur lesen stringa1 Wert.

Welches ist der beste Weg, Parameter zwischen der Qml Loader-Komponente und dem geladenen Element festzulegen/zu übertragen? Vielen Dank im Rat

Mit freundlichen Grüßen Daniele

Antwort

1

es sein sollte:

itemLoader.setSource("Test.qml", {"stringa1": "ScrivoStr1", "stringa2": "ScrivoStr2"}) 

Beachten Sie, dass setSourceis declared as:

object setSource(url source, object properties) 

Es nimmt nur ein Objekt, das alle Eigenschaften enthält. Sie haben stattdessen mehrere Objekte übergeben. Nur die erste wird in Ihrem Fall berücksichtigt, alle anderen werden verworfen.
Wenn Sie mehrere Parameter verwenden müssen, legen Sie alle in ein einzelnes Objekt. Das ist alles.

+0

Es funktioniert, danke. – daniele86