2017-11-20 18 views
0

Ich habe versucht, meinen Kopf für eine Weile um diesen zu wickeln und kam mit ein paar Hacks, aber keiner von ihnen scheint der richtige Weg zu sein. Hoffentlich macht das Sinn. Angenommen, ich habe drei qml-Dateien.QML Pass QtObject von einem Qml zu einem anderen

Erste QML:

... 
ListView { 
    id: patientList 
    model: patientModel 
    delegate: E3DPatientListItem { 
     onClicked: { 
      if (patientList.currentIndex !== index) 
      { 
       patientList.currentIndex = index 
       detailStackView.push("DetailPanel.qml", 
        { "view": view, "ptInfo": model }) 

...

DetailPanel:

... 
Page { 
    property QtObject ptInfo 
    Timeline { 
     ptInfo: ptInfo // <- how do I pass this to Timeline? 
... 

Timeline.qml

... 
Item { 
    property QtObject ptInfo // <- always null :(
... 
+1

Was ist mit Timeline {ptInfo: parent.ptInfo}? oder Seite {Eigenschaftenalias ptInfo: timeline.ptInfo}? – Dinesh

+0

Ich dachte, ich hätte alles versucht, aber 'Timeline {ptInfo: parent.ptInfo}' funktioniert tatsächlich! Vielen Dank. –

Antwort

0
... 
Page { 
    property QtObject ptInfo 
    Timeline { 
     ptInfo: ptInfo // <- how do I pass this to Timeline? 
... 

Was glaubst du, ptInfo: ptInfo erreicht? Sie binden die Eigenschaft an eine eigene Kennung.

Vielleicht versuchen Sie nicht, den gleichen Bezeichner zu verwenden, um Abschattung zu vermeiden, oder geben Sie die Page und id und dann ptInfo: pageid.ptInfo. parent.ptInfo funktioniert auch, solange das Objekt die übergeordnete Eigenschaft ausgesetzt hat, bedenken Sie, dass QtObjectnicht.

Allerdings brauchen Sie nicht wirklich Eigenschaft haben QtObject ptInfo in Timeline.qml, solange eine Zeitleiste immer innerhalb einer Seite instanziiert wird, Sie ptInfo direkt aus dem Inneren der Timeline, weil der dynamischen Scoping zugreifen können. Beachten Sie, dass dynamische Bereichseigenschaften nur für Eigenschaften funktionieren, die im Stammelement der jeweiligen qml-Datei definiert sind:

// Obj1.qml 
Item { 
    property int test: 7 
    Obj2{} 
} 

// Obj2.qml 
Item { 
    Component.onCompleted: console.log(test) // it will work 
}