2017-05-30 4 views
2

erstellt Objekt habe ich eine QML Loader, die eine andere qml lädtPass Eigenschaften von QML Loader

Loader { id: gaugeLoader } 

PieMenu { 
    id: pieMenu 

    MenuItem { 
     text: "Add Bar Gauge" 
     onTriggered: gaugeLoader.source = "qrc:/Gauges/horizontalBarGauge.qml" 
    } 
    MenuItem { 
     text: "Action 2" 
     onTriggered: print("Action 2") 
    } 
    MenuItem { 
     text: "Action 3" 
     onTriggered: print("Action 3") 
    } 
} 

Wie kann ich Parameter übergeben die ID zu setzen, width, height und so weiter der geladenen qml?

Antwort

3

Methode 1:Loader::setSource

können Sie die Loader::setSource(url source, object properties) Funktion verwenden, um die Eigenschaften während der Bauphase zu setzen, zum Beispiel:

gaugeLoader.setSource("qrc:/Gauges/horizontalBarGauge.qml", {"width": 100, "height": 100}); 

Beachten Sie, dass Sie nicht die id attribute auf diese Weise einstellen kann, weil es ist kein gewöhnliches Eigenschaftsattribut:

Einmal eine Objektinstanz i s erstellt, kann der Wert seines ID-Attributs nicht geändert werden. Obwohl es wie eine gewöhnliche Eigenschaft aussieht, ist das Attribut id kein gewöhnliches Eigenschaftsattribut, und es gelten spezielle Semantiken ; Zum Beispiel ist es im obigen Beispiel nicht möglich, auf myTextInput.id zuzugreifen.

Stattdessen können Sie eine Eigenschaft alias wie folgt erstellen:

property alias gauge: gaugeLoader.item 

Methode 2: Geometrie relativ zum Loader-Objekt

Als Alternative, können Sie die width einstellen und height auf das Objekt Loader und geben Sie die Breite und Höhe in horizontalBarGauge.qml relativ zu seinem übergeordneten, dh Loader Objekt.

property alias gauge: gaugeLoader.item 
Loader { 
    id: gaugeLoader 
    width: 100 
    height: 100 
} 

qrc: /Gauges/horizontalBarGauge.qml:

Item { 
    anchors.fill: parent 
} 
Verwandte Themen