2015-01-17 44 views
5

Mam artykuł klasa bazowa coś takiego:Jak przesłonić obsługi sygnału składnika nadklasy

bazy .qml:

Item { 
    Thing { 
     id: theThing; 

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

I staram się, aby element pochodnej - Derived.qml .

Jak mogę zmienić obsługę onMySignal handler z theThing? Próbowałem rzeczy jak ten ...

Pochodzące .qml:

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

ale nie mogę znaleźć nic powiedzieć, jak wyrazić to składniowo poprawnie, czy/jak rzeczywiście iść o tym!

Odpowiedz

4

Można zdefiniować kod obsługi sygnału jako właściwość w nadrzędnej i zastąpić go w pozycji pochodne:

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

    Thing { 
     id: theThing; 

     onMySignal: handlerCode() 
    } 
} 

Zastępowanie:

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

Awesome, dzięki! – GreenAsJade

+0

Lub nawet bez dodawania właściwości ... Wystarczy mieć funkcję zdefiniowaną w bazie, możesz po prostu utworzyć nową w pochodnej o tej samej nazwie, aby ją przesłonić ... Tak po prostu wykonaj 'onSignal: callBackFunction()' w Base i zdefiniuj proste 'callBackFunction()' w obu Base i pochodnych składników, które chcesz –