2015-01-17 11 views
5

Ich habe eine Basisklasse Element, so etwas zu überschreiben:Wie Signal-Handler von Super Komponente

Basis .qml:

Item { 
    Thing { 
     id: theThing; 

     onMySignal: { console.log("The signal"); } 
    } 
} 

Und ich versuche, ein abgeleitetes Element zu machen - Derived.qml .

Wie kann ich den onMySignal Handler von theThing übersteuern? Ich habe Sachen wie diese versucht ...

Abgeleitet .qml:

Base { 
    theThing.onMySignal: { console.log("Do different things with theThing in Derived") } 
} 

aber ich kann nichts finden, mir zu sagen, wie diese syntaktisch korrekt auszudrücken, oder ob/wie man tatsächlich gehen darüber!

Antwort

4

Sie können den Code der Signal-Handler als eine Eigenschaft in übergeordneter Klasse definieren und in dem abgeleiteten Elemente außer Kraft setzen:

Item { 
    property var handlerCode: function() { console.log("In Superclass") }; 

    Thing { 
     id: theThing; 

     onMySignal: handlerCode() 
    } 
} 

Zwingende:

Base { 
    handlerCode: function() { console.log("In Derived Item!") }; 
} 
+0

Awesome, thanks! – GreenAsJade

+0

Oder sogar ohne eine Eigenschaft hinzuzufügen ... Nur mit einer Funktion in der Basis definiert, können Sie einfach eine neue in abgeleitet mit dem gleichen Namen erstellen, um es zu überschreiben ... Also einfach tun 'onSignal: callBackFunction() 'in Base und Definieren Sie die einfache 'callBackFunction()' in Base und den abgeleiteten Komponenten, die Sie möchten –