2016-03-30 6 views
0

expose Das QT Quick UI Forms Beispiel beschreibt, wie die deklarative Benutzeroberfläche von der imperativen Javascript zu trennen.QT Quick UI Forms: Wie benutzerdefinierte Signal von QML-Komponente und Handle in Javascript

Es wird jedoch nicht beschrieben, wie ein benutzerdefiniertes Signal erstellt wird, das auf der Deklarationsebene deklariert (deklariert?) Und in der JavaScript-Datei behandelt wird.

Das Formular soll in eine Shell-Anwendung geladen werden, die benutzerdefinierte Feuerzeichen aufrufen muss: init und shutdown.

Es scheint, ich sollte diese in der Lage sein zu tun ::

// MyComponent.ui.qml 
Item { 
    signal init() 
} 

// MyComponent.qml javascript file 
MyComponent { 
    onInit : { 
    // do some initialization 
    } 
} 

// Usage in shell 
MyComponent { 
    id: mycomp 
} 

// somewhere 
button.clicked: mycomp.init() 
+0

'Schaltfläche {onClicked: mycomp.init(); } ', nein? – folibis

+0

Das Problem ist, dass dieses Init-Signal nicht ausgesetzt ist und ich bekomme eine Meldung, dass die Init-Funktion nicht existiert. Ist das nicht auch der deklarative Code, der den QT-Designer zum Ersticken bringt? – JeffV

Antwort

0

Die Reihenfolge der Referenzen nicht korrekt war.

werden muss: Loader => MyComponent.qml (Javascript) => MyComponentForm.ui.qml

Aber war: Loader => MyComponentForm.ui.qml

// MyComponent.qml (Javascript) wurde nicht referenziert

Unser Loader wurde konfiguriert, um die deklarative qml direkt zu laden. Durch Laden der Javascript-qml-Datei behoben. (die wiederum auf die MyComponentForm bezogen)

Auf diese Weise wurde unsere JavaScript-Init-Funktion ausgesetzt. Das Modul mit imperativem Javascript erweitert das deklarative qml um JavaScript-Funktionen.

// MyComponentForm.ui.qml 
Item { 
    // property aliases as required by imperative code 
    // declarative ui stuff 
} 

// MyComponent.qml javascript file 
MyComponentForm { 
    onInit : { 
    // do some initialization 
    } 
} 

Loader { 
    anchors.fill: parent 
    id: pageLoader 
} 

Button { 
    onClicked { 
     source = "qrc://MyComponent.qml"; 
     pageLoader.item.init(); 
    } 
}